cdm-dataportal / modules / cdm_dataportal / theme / cdm_dataportal.common.theme @ b5e773ef
History | View | Annotate | Download (12.8 KB)
1 |
<?php |
---|---|
2 |
// $Id$ |
3 |
|
4 |
/** |
5 |
* Copyright (C) 2007 EDIT |
6 |
* European Distributed Institute of Taxonomy |
7 |
* http://www.e-taxonomy.eu |
8 |
* |
9 |
* The contents of this file are subject to the Mozilla Public License Version 1.1 |
10 |
* See http://www.mozilla.org/MPL/MPL-1.1.html for the full license terms. |
11 |
*/ |
12 |
|
13 |
define(FOOTNOTE_ANNOTATIONS, 'annotations'); |
14 |
|
15 |
/** |
16 |
* TODO if getting fragment from request is possible remove $_REQUEST['highlite'] HACK |
17 |
* NOT WORKING since fragments are not available to the server |
18 |
function fragment(){ |
19 |
global $fragment; |
20 |
if(!$fragment){ |
21 |
$fragment = substr($_SERVER['REQUEST_URI'], strrpos($_SERVER['REQUEST_URI'], '#')); |
22 |
} |
23 |
return $fragment; |
24 |
} |
25 |
*/ |
26 |
|
27 |
function uuid_anchor($uuid, $innerHTML){ |
28 |
$highlite = $_REQUEST['highlite'] == $uuid; |
29 |
return '<a name="'.$uuid.'" ></a><span class="'.($highlite ? 'highlite' : '').'">'.$innerHTML.'</span>'; |
30 |
} |
31 |
|
32 |
/** |
33 |
* Enter description here... |
34 |
* |
35 |
* @param unknown_type $name |
36 |
* @param unknown_type $numOfNameTokens |
37 |
* @return unknown |
38 |
* @deprecated looks like this is not used anymore |
39 |
*/ |
40 |
function tagNameParts($name, $numOfNameTokens){ |
41 |
|
42 |
$out = '<span class="name">'; |
43 |
|
44 |
$token = strtok($name, " \n\t"); |
45 |
$i = 0; |
46 |
$noSpace = true; |
47 |
while($token != false){ |
48 |
if($i == $numOfNameTokens){ |
49 |
$out .= '</span> <span class="authors">'; |
50 |
$noSpace = true; |
51 |
} |
52 |
$out .= ($noSpace?'':' ').$token; |
53 |
$noSpace = false; |
54 |
$token = strtok(" \n\t"); |
55 |
$i++; |
56 |
} |
57 |
return $out.'</span>'; |
58 |
} |
59 |
|
60 |
/** |
61 |
* Converts an array of TagedText items into a sequence of corresponding html tags whereas |
62 |
* each item will provided with a class attribute which set to the key of the TaggedText item. |
63 |
* |
64 |
* @param array $taggedtxt |
65 |
* @param String $tag |
66 |
* @param String $glue the string by which the chained text tokens are concatenated together. |
67 |
* Default is a blank character |
68 |
* @return String of HTML |
69 |
*/ |
70 |
function theme_cdm_taggedtext2html(array &$taggedtxt, $tag = 'span', $glue = ' ', $skiptags = array()){ |
71 |
$out = ''; |
72 |
$i = 0; |
73 |
foreach($taggedtxt as $tt){ |
74 |
if(!in_array($tt->type, $skiptags) && strlen($tt->text) > 0){ |
75 |
$out .= (strlen($out) > 0 && ++$i < count($taggedtxt)? $glue : '').'<'.$tag.' class="'.$tt->type.'">'.t($tt->text).'</'.$tag.'>'; |
76 |
} |
77 |
} |
78 |
return $out; |
79 |
} |
80 |
|
81 |
/* ============================ annotations ============================= */ |
82 |
|
83 |
/** |
84 |
* Almost any cdmObject may be annotated. Therefore we provide a generic way to display |
85 |
* as well as create or update annotations. |
86 |
* The following cdm classes are annotatable: |
87 |
* |
88 |
* DescriptionElementBase |
89 |
* EventBase |
90 |
* HomotypicalGroup |
91 |
* IdentifiableEntity |
92 |
* DescriptionBase |
93 |
* IdentifiableMediaEntity |
94 |
* Media |
95 |
* Sequence |
96 |
* TaxonBase |
97 |
* TaxonNameBase |
98 |
* TaxonomicTree |
99 |
* TermBase |
100 |
* LanguageStringBase |
101 |
* ReferencedEntityBase |
102 |
* NomenclaturalStatus |
103 |
* OriginalSourceBase |
104 |
* RelationshipBase |
105 |
* TypeDesignationBase |
106 |
* TaxonNode |
107 |
* WorkingSet |
108 |
* |
109 |
* TODO it should be configurable which objects can be annotated as this might differ in dataportals |
110 |
* |
111 |
*/ |
112 |
function theme_cdm_annotations_as_footnotekeys($cdmBase){ |
113 |
|
114 |
$annotationUrl = cdm_compose_annotations_url($cdmBase); |
115 |
if($annotationUrl){ |
116 |
$annotationPager = cdm_ws_get($annotationUrl, null, null, null, true); |
117 |
if($annotationPager->count > 0){ |
118 |
foreach($annotationPager->records as $annotation){ |
119 |
$footnoteKey = FootnoteManager::addNewFootnote(RenderHints::getFootnoteListKey() . '-annotations', $annotation->text); |
120 |
$out .= theme('cdm_footnote_key', $footnoteKey, RenderHints::getFootnoteListKey() . '-annotations', (isset($out)? ',' : '')); |
121 |
} |
122 |
} |
123 |
} |
124 |
return $out; |
125 |
} |
126 |
|
127 |
|
128 |
function theme_cdm_annotation_footnotes($footnoteListKey, $enclosingTag = 'span'){ |
129 |
return theme('cdm_footnotes', $footnoteListKey . '-annotations', $enclosingTag); |
130 |
} |
131 |
|
132 |
function theme_cdm_annotation_content($AnnotationTO){ |
133 |
|
134 |
drupal_add_js(drupal_get_path('module', 'cdm_dataportal').'/js/cdm_annotations.js'); |
135 |
drupal_add_js(drupal_get_path('module', 'cdm_dataportal').'/js/jquery.form.js'); |
136 |
|
137 |
$out .= theme('cdm_list_of_annotations', $AnnotationTO->annotationElements); |
138 |
|
139 |
$annotationUrl = cdm_compose_url(CDM_WS_ANNOTATIONS, array($AnnotationTO->uuid)); |
140 |
$annotationProxyUrl = url('cdm_api/proxy/'. urlencode($annotationUrl).'/cdm_annotation_post'); |
141 |
|
142 |
// TODO users have to be authenticated to the dataportal to be able to write annotations |
143 |
$out .= ' |
144 |
<div class="annotation_create"> |
145 |
<form action="'.$annotationProxyUrl.'" method="POST"> |
146 |
<textarea name="annotation"></textarea> |
147 |
<input type="hidden" name="commentator" value=""> |
148 |
<input type="submit" value="'.t('Save annotation').'" /> |
149 |
</form> |
150 |
</div> |
151 |
'; |
152 |
|
153 |
return $out; |
154 |
} |
155 |
|
156 |
function theme_cdm_list_of_annotations($annotationElements){ |
157 |
|
158 |
$out = '<ul class="annotation_list">'; |
159 |
|
160 |
foreach ($annotationElements as $key => $row){ |
161 |
$created[$key] = $row; |
162 |
} |
163 |
array_multisort($created, SORT_ASC, $annotationElements); |
164 |
|
165 |
foreach ($annotationElements as $annotation){ |
166 |
$out .= '<li>' . $annotation->text . '</li>'; |
167 |
} |
168 |
|
169 |
$out .= '</ul>'; |
170 |
|
171 |
return $out; |
172 |
|
173 |
} |
174 |
|
175 |
/* ============================ footnotes ============================= */ |
176 |
|
177 |
function theme_cdm_footnote_key($footnoteKey, $footnoteListKey, $separator = '', $highlightable=true){ |
178 |
$out = '<span class="footnote-key footnote-key-'.$footnoteKey.' member-of-footnotes-'.$footnoteListKey.'">'.$separator |
179 |
.'<a href="#footnote-'.$footnoteKey.'">'.$footnoteKey.'</a>' |
180 |
.'</span>'; |
181 |
return $out; |
182 |
} |
183 |
|
184 |
function theme_cdm_footnote($footnoteKey, $footnoteText){ |
185 |
_add_js_footnotes(); |
186 |
$out = '<span class="footnote footnote-'.$footnoteKey.'"><a name="footnote-'.$footnoteKey.'"></a><span class="footnote-anchor">'.$footnoteKey.'.</span> '.$footnoteText.'</span>'; |
187 |
return $out; |
188 |
} |
189 |
|
190 |
|
191 |
function theme_cdm_footnotes($footnoteListKey, $enclosingTag = 'span'){ |
192 |
|
193 |
$out = '<'.$enclosingTag.' class="footnotes footnotes-'.$footnoteListKey.' ">' . FootnoteManager::renderFootnoteList($footnoteListKey) . '</'.$enclosingTag.'>'; |
194 |
return $out; |
195 |
} |
196 |
|
197 |
|
198 |
/* ============================ pager ============================= */ |
199 |
|
200 |
|
201 |
function theme_cdm_pager(&$pager, $path, $parameters){ |
202 |
$out = ''; |
203 |
|
204 |
if ($pager->pagesAvailable > 1) { |
205 |
|
206 |
$out .= '<div class="pager">'; |
207 |
if($pager->currentIndex > 0){ |
208 |
$out .= theme('cdm_pager_link', t('« first'), 0, $pager, $path, $parameters, array('class' => 'pager-first')); |
209 |
$out .= theme('cdm_pager_link', t('‹ previous'), $pager->currentIndex - 1, $pager, $path, $parameters, array('class' => 'pager-previous')); |
210 |
} |
211 |
|
212 |
if($pager->indices[0] > 0){ |
213 |
$out .= '<div class="pager-list-dots-left">...</div>'; |
214 |
} |
215 |
|
216 |
foreach($pager->indices as $index){ |
217 |
$label = $index + 1; |
218 |
$out .= theme('cdm_pager_link', $label, $index, $pager, $path, $parameters, array('class' => 'pager-first')); |
219 |
} |
220 |
if($pager->indices[count($pager->indices) - 1] < $pager->pagesAvailable - 1){ |
221 |
$out .= '<div class="pager-list-dots-right">...</div>'; |
222 |
} |
223 |
|
224 |
if($pager->nextIndex){ |
225 |
$out .= theme('cdm_pager_link', t('next ›'), $pager->nextIndex, $pager, $path, $parameters, array('class' => 'pager-next')); |
226 |
$out .= theme('cdm_pager_link', t('last »'), $pager->pagesAvailable - 1, $pager, $path, $parameters, array('class' => 'pager-last')); |
227 |
} |
228 |
$out .= '</div>'; |
229 |
|
230 |
return $out; |
231 |
} |
232 |
} |
233 |
|
234 |
function theme_cdm_pager_link($text, $linkIndex, &$pager, $path, $parameters = array(), $attributes) { |
235 |
|
236 |
$out = ''; |
237 |
$parameters['search']['page'] = $linkIndex; |
238 |
if ($linkIndex == $pager->currentIndex) { |
239 |
$out = '<strong>'.$text.'</strong>'; |
240 |
} else { |
241 |
$queryString = drupal_query_string_encode($parameters); |
242 |
$out = l($text, $path, $attributes, $queryString); |
243 |
} |
244 |
return $out; |
245 |
} |
246 |
|
247 |
/* ============================ special buttons ============================= */ |
248 |
|
249 |
function theme_cdm_back_to_search_result_button(){ |
250 |
$out = ''; |
251 |
if($_SESSION['cdm']['search']){ |
252 |
/*['cdm']['last_search']*/ |
253 |
//$out .= '<div id="backButton">'.l(t('Back to search result'), $_SESSION ).'</div>'; |
254 |
$out .= '<div id="backButton">'.l(t('Back to search result'), "http://" . $_SERVER['SERVER_NAME'] . $_SESSION['cdm']['last_search'] ).'</div>'; |
255 |
|
256 |
} |
257 |
return $out; |
258 |
} |
259 |
|
260 |
function theme_cdm_back_to_image_gallery_button(){ |
261 |
//$galleryLinkUri = path_to_taxon($taxon->uuid).'/images'; |
262 |
//$gallery_name = $taxon->uuid; |
263 |
//$mediaList = cdm_ws_get(CDM_WS_PORTAL_TAXON_MEDIA, array($taxon->uuid, $prefMimeTypeRegex, $prefMediaQuality)); |
264 |
|
265 |
$out = '<div id="backToGalleryButton">'.l(t('Back to Images'), $_SESSION['cdm']['last_gallery'] ).'</div>'; |
266 |
|
267 |
return $out; |
268 |
} |
269 |
|
270 |
function theme_cdm_print_button(){ |
271 |
|
272 |
drupal_add_js ('$(document).ready(function() { |
273 |
$(\'#print_button\').click(function () { |
274 |
window.print(); |
275 |
}); |
276 |
});', 'inline'); |
277 |
|
278 |
$output = '<div id="print_button"><img src="' |
279 |
.drupal_get_path('module', 'cdm_dataportal').'/images/print_icon.gif' |
280 |
. ' "alt="' . t('Print this page') . ' "title="'.t('Print this page').'" />'; //.t(' Print this page'); |
281 |
//$output .= l(' Print this page', ''); |
282 |
$output .= '<span>Print this page</span>'; |
283 |
$output .= '</div>'; |
284 |
|
285 |
return $output; |
286 |
} |
287 |
|
288 |
/* ============================ other ============================= */ |
289 |
|
290 |
//function theme_cdm_credits(){ |
291 |
// return ""; |
292 |
// $secRef_array = _cdm_dataportal_currentSecRef_array(); |
293 |
// return '<span class="sec_reference_citation">'.$secRef_array['citation'].'</span>' |
294 |
// .( $secRef_array['period'] ? ' <span class="year">'.partialToYear($secRef_array['period']).'</span>' : '') |
295 |
// .( $secRef_array['authorTeam'] ? '<div class="author">'.$secRef_array['authorTeam']['titleCache'].'</div>' : ''); |
296 |
//} |
297 |
|
298 |
|
299 |
function theme_cdm_dynabox($label, $content_url, $theme, $enclosingtag = 'li'){ |
300 |
drupal_add_js(drupal_get_path('module', 'cdm_dataportal').'/js/cdm_dynabox.js'); |
301 |
|
302 |
$cdm_proxy_url = url('cdm_api/proxy/'.urlencode($content_url)."/$theme"); |
303 |
$out .= '<li class="dynabox"><span class="label" alt="'.t('Click for accepted taxon').'">'.$label.'</span>'; |
304 |
$out .= '<ul class="dynabox_content" title="'.$cdm_proxy_url.'"><li><img class="loading" src="'.drupal_get_path('module', 'cdm_dataportal').'/images/loading_circle_grey_16.gif" style="display:none;"></li></ul>'; |
305 |
return $out; |
306 |
} |
307 |
|
308 |
/* ============================ java script functions ============================= */ |
309 |
|
310 |
function _add_js_thickbox(){ |
311 |
// ---- jQuery thickbox: |
312 |
/* |
313 |
* bug: compat-1.0.js && thickbox.js line 237 .trigger("unload") |
314 |
* -> event is not triggered because of problems with compat-1.0.js' |
315 |
* see INSTALL.txt |
316 |
* |
317 |
*/ |
318 |
//drupal_add_js(drupal_get_path('module', 'cdm_dataportal').'/js/jquery.imagetool.min.js'); |
319 |
drupal_add_js(drupal_get_path('module', 'cdm_dataportal').'/js/thickbox/thickbox.js'); |
320 |
drupal_add_css(drupal_get_path('module', 'cdm_dataportal').'/js/thickbox/cdm_thickbox.css'); |
321 |
} |
322 |
|
323 |
function _add_js_lightbox($galleryID){ |
324 |
/* |
325 |
* Important Notice: |
326 |
* The jquery.lightbox-0.5.js has been modified in order to allow using the "alt" attribute |
327 |
* for captions instead of the "title" attribute |
328 |
*/ |
329 |
$lightBoxBasePath = drupal_get_path('module', 'cdm_dataportal') .'/js/jquery-lightbox-0.5'; |
330 |
drupal_add_js($lightBoxBasePath.'/js/jquery.lightbox-0.5.js'); |
331 |
drupal_add_css($lightBoxBasePath.'/css/jquery.lightbox-0.5.css'); |
332 |
drupal_add_js ('$(document).ready(function() { |
333 |
$(\'#'.$galleryID.' a.lightbox\').lightBox({ |
334 |
fixedNavigation: true, |
335 |
imageLoading: \''.$lightBoxBasePath.'/images/lightbox-ico-loading.gif\', |
336 |
imageBtnPrev: \''.$lightBoxBasePath.'/images/lightbox-btn-prev.gif\', |
337 |
imageBtnNext: \''.$lightBoxBasePath.'/images/lightbox-btn-next.gif\', |
338 |
imageBtnClose: \''.$lightBoxBasePath.'/images/lightbox-btn-close.gif\', |
339 |
imageBlank: \''.$lightBoxBasePath.'/images/lightbox-blank.gif\' |
340 |
}); |
341 |
}); |
342 |
', 'inline'); |
343 |
} |
344 |
|
345 |
function _add_js_footnotes(){ |
346 |
drupal_add_js(drupal_get_path('module', 'cdm_dataportal').'/js/footnotes.js'); |
347 |
} |
348 |
|
349 |
|
350 |
function _add_js_cluetip(){ |
351 |
|
352 |
//TODO replace by http://www.socialembedded.com/labs/jQuery-Tooltip-Plugin/jQuery-Tooltip-Plugin.html |
353 |
drupal_add_js(drupal_get_path('module', 'cdm_dataportal').'/js/cluetip/jquery.cluetip.js'); |
354 |
drupal_add_js(drupal_get_path('module', 'cdm_dataportal').'/js/jquery.dimensions.js'); |
355 |
drupal_add_js(drupal_get_path('module', 'cdm_dataportal').'/js/cluetip/jquery.hoverIntent.js'); |
356 |
drupal_add_css(drupal_get_path('module', 'cdm_dataportal').'/js/cluetip/jquery.cluetip.css'); |
357 |
drupal_add_js ("$(document).ready(function(){ |
358 |
$('.cluetip').css({color: '#0062C2'}).cluetip({ |
359 |
splitTitle: '|', |
360 |
showTitle: true, |
361 |
activation: 'hover', |
362 |
sicky: true, |
363 |
arrows: true, |
364 |
dropShadow: false, |
365 |
cluetipClass: 'rounded' |
366 |
}); |
367 |
});", 'inline'); |
368 |
} |
369 |
|
370 |
function _add_js_ahah(){ |
371 |
drupal_add_js(drupal_get_path('module', 'cdm_dataportal').'/js/ahah-content.js'); |
372 |
} |