added a LAYOUT option

use @define(LAYOUT,{'table','list','deflist'}) to choose between table, ul, ol ('list' and ABBRV_TYPE='index') and definition lists for displaying bibtex entries.

$bib->index is now displayed as a number, not a number in brackets, for compatibility with list values. however this is invisible to the user because the brackets are added in getAbbrv().

bib2html now includes the echoing of links.
This commit is contained in:
Matthieu Guillaumin
2013-03-10 09:44:10 +01:00
committed by Martin Monperrus
parent bf49236033
commit f9b2f7a62a
+118 -51
View File
@@ -3,6 +3,7 @@
URL: http://www.monperrus.net/martin/bibtexbrowser/ URL: http://www.monperrus.net/martin/bibtexbrowser/
Feedback & Bug Reports: martin.monperrus@gmail.com Feedback & Bug Reports: martin.monperrus@gmail.com
(C) 2013 Matthieu Guillaumin
(C) 2006-2012 Martin Monperrus (C) 2006-2012 Martin Monperrus
(C) 2005-2006 The University of Texas at El Paso / Joel Garcia, Leonardo Ruiz, and Yoonsik Cheon (C) 2005-2006 The University of Texas at El Paso / Joel Garcia, Leonardo Ruiz, and Yoonsik Cheon
This program is free software; you can redistribute it and/or This program is free software; you can redistribute it and/or
@@ -117,6 +118,8 @@ define('BIBTEXBROWSER','v__GITHUB__');
@define('METADATA_DC',true); @define('METADATA_DC',true);
@define('METADATA_EPRINTS',false); @define('METADATA_EPRINTS',false);
@define('LAYOUT','table'); // may be table/list/deflist. defines the HTML rendering options (<table>, <ol>/<ul>, <dl>, resp.). 'list' only works with 'ABBRV_TYPE'='index' (ordered list) and 'none' (unordered list, the default if another choice than 'list' is made).
// in embedded mode, we still need a URL for displaying bibtex entries alone // in embedded mode, we still need a URL for displaying bibtex entries alone
// this is usually resolved to bibtexbrowser.php // this is usually resolved to bibtexbrowser.php
// but can be overridden in bibtexbrowser.local.php // but can be overridden in bibtexbrowser.local.php
@@ -240,7 +243,7 @@ function _zetDB($bibtex_filenames) {
&& is_readable($compiledbib) && is_readable($compiledbib)
&& filesize($compiledbib)>0 && filesize($compiledbib)>0
) { ) {
$f = fopen($compiledbib,'r'); $f = fopen($compiledbib,'r+'); // my Unix seems to consider flock as a writing operation
//we use a lock to avoid that a call to bibbtexbrowser made while we write the object loads an incorrect object //we use a lock to avoid that a call to bibbtexbrowser made while we write the object loads an incorrect object
if (flock($f,LOCK_EX)) { if (flock($f,LOCK_EX)) {
$s = filesize($compiledbib); $s = filesize($compiledbib);
@@ -1243,21 +1246,29 @@ class BibEntry {
} }
/** Returns the abbreviation. */ /** Returns the abbreviation. */
function getAbbrv() { function getRawAbbrv() {
if (ABBRV_TYPE == 'index') return $this->index; if (ABBRV_TYPE == 'index') return $this->index;
if (ABBRV_TYPE == 'none') return ''; if (ABBRV_TYPE == 'none') return '';
if (ABBRV_TYPE == 'key') return '['.$this->getKey().']'; if (ABBRV_TYPE == 'key') return $this->getKey();
if (ABBRV_TYPE == 'year') return '['.$this->getYear().']'; if (ABBRV_TYPE == 'year') return $this->getYear();
if (ABBRV_TYPE == 'x-abbrv') { if (ABBRV_TYPE == 'x-abbrv') {
if ($this->hasField('x-abbrv')) {return $this->getField('x-abbrv');} if ($this->hasField('x-abbrv')) {return $this->getField('x-abbrv');}
return $this->abbrv; return $this->abbrv;
} }
// otherwise it is a user-defined function in bibtexbrowser.local.php // otherwise it is a user-defined function in bibtexbrowser.local.php
$f = ABBRV_TYPE; $f = ABBRV_TYPE;
return $f($this); return $f($this);
} }
/** Returns the abbreviation. */
function getAbbrv() {
$abbrv = $this->getRawAbbrv();
if ( ABBRV_TYPE == 'key' || ABBRV_TYPE == 'year' || ( ABBRV_TYPE == 'index' && LAYOUT != 'list' ) ) {
$abbrv = '['.$abbrv.']';
}
return $abbrv;
}
/** Sets the abbreviation (e.g. [OOPSLA] or [1]) */ /** Sets the abbreviation (e.g. [OOPSLA] or [1]) */
function setAbbrv($abbrv) { function setAbbrv($abbrv) {
@@ -1296,37 +1307,45 @@ class BibEntry {
} }
/** Outputs an HTML line (<tr>)with two TDS inside /** Outputs HTML line according to layout */
*/ function toHTML() {
function toTR() { switch(LAYOUT) { // open row
echo '<tr class="bibline">'; case 'list':
echo '<td class="bibref">'; echo '<li class="bibline" value="'.$this->getAbbrv().'">';
//echo '<a name="'.$this->getId().'"></a>'; break;
case 'table':
echo $this->getAbbrv().'</td> '; echo '<tr class="bibline"><td class="bibref">';
echo '<td class="bibitem">'; break;
case 'deflist':
echo '<dl class="bibline"><dt class="bibref">'; break;
}
$this->anchor();
switch(LAYOUT) { // close bibref and open bibitem
case 'table':
echo $this->getAbbrv().'</td><td class="bibitem">';
break;
case 'deflist':
echo $this->getAbbrv().'</dt><dd class="bibitem">';
break;
}
echo bib2html($this); echo bib2html($this);
echo bib2links($this);
$href = 'href="'.$this->getURL().'"'; switch(LAYOUT) { // close row
case 'list':
if (BIBTEXBROWSER_BIBTEX_LINKS) { echo '</li>';
// we add biburl and title to be able to retrieve this important information break;
// using Xpath expressions on the XHTML source case 'table':
echo " <a".(BIBTEXBROWSER_BIB_IN_NEW_WINDOW?' target="_blank" ':'')." class=\"biburl\" title=\"".$this->getKey()."\" {$href}>[bibtex]</a>"; echo '</td></tr>';
break;
case 'deflist':
echo '</dd></dl>';
break;
}
} }
// returns an empty string if no url present /** Create the entry anchor */
echo $this->getUrlLink(); function anchor() {
echo '<a name="'.$this->getAbbrv().'"></a>';
if ($this->hasField('doi')) {
echo ' <a href="http://dx.doi.org/'.$this->getField("doi").'">[doi]</a>';
}
// Google Scholar ID
if ($this->hasField('gsid')) {
echo ' <a href="http://scholar.google.com/scholar?cites='.$this->getField("gsid").'">[cites]</a>';
}
echo "</td></tr>\n";
} }
/** Outputs an coins URL: see http://ocoins.info/cobg.html /** Outputs an coins URL: see http://ocoins.info/cobg.html
@@ -1436,12 +1455,63 @@ class BibEntry {
} }
function layoutHeaderHTML() {
$tag = '';
switch(LAYOUT) { /* switch for different layouts */
case 'list':
if (ABBRV_TYPE=='index') {
$tag='ol';
} else { // assume none
$tag='ul';
}
break;
case 'table':
$tag = 'table';
break;
case 'deflist':
$tag = 'div';
break;
default:
die('Unknown LAYOUT');
}
echo '<' . $tag . ' class="result">';
return $tag;
}
function layoutFooterHTML($tag) {
echo '</' . $tag . '>';
}
/** this function encapsulates the user-defined name for bib to HTML*/ /** this function encapsulates the user-defined name for bib to HTML*/
function bib2html(&$bibentry) { function bib2html(&$bibentry) {
$function = BIBLIOGRAPHYSTYLE; $function = BIBLIOGRAPHYSTYLE;
return $function($bibentry); return $function($bibentry);
} }
function bib2links(&$bibentry) {
$href = 'href="'.$bibentry->getURL().'"';
if (BIBTEXBROWSER_BIBTEX_LINKS) {
// we add biburl and title to be able to retrieve this important information
// using Xpath expressions on the XHTML source
$str .= " <a".(BIBTEXBROWSER_BIB_IN_NEW_WINDOW?' target="_blank" ':'')." class=\"biburl\" title=\"".$bibentry->getKey()."\" {$href}>[bibtex]</a>";
}
// returns an empty string if no url present
$str .= $bibentry->getUrlLink();
if ($bibentry->hasField('doi')) {
$str .= ' <a href="http://dx.doi.org/'.$bibentry->getField("doi").'">[doi]</a>';
}
// Google Scholar ID
if ($bibentry->hasField('gsid')) {
$str .= ' <a href="http://scholar.google.com/scholar?cites='.$bibentry->getField("gsid").'">[cites]</a>';
}
return $str;
}
/** encapsulates the user-defined sections. @nodoc */ /** encapsulates the user-defined sections. @nodoc */
function _DefaultBibliographySections() { function _DefaultBibliographySections() {
$function = BIBLIOGRAPHYSECTIONS; $function = BIBLIOGRAPHYSECTIONS;
@@ -2301,21 +2371,19 @@ class SimpleDisplay {
echo 'Options: '.@implode(',',$this->options).'<br/>'; echo 'Options: '.@implode(',',$this->options).'<br/>';
} }
?> $tag = layoutHeaderHTML();
<table class="result" >
<?php
$count = count($this->entries); $count = count($this->entries);
$i=0; $i=0;
foreach ($this->entries as $bib) { foreach ($this->entries as $bib) {
// by default, index are in decrasing order // by default, index are in decreasing order
// so that when you add a publicaton recent , the indices of preceding publications don't change // so that when you add a publicaton recent , the indices of preceding publications don't change
$bib->setIndex('['.($count-($i++)).']'); $bib->setIndex($count-($i++));
$bib->toTR(); $bib->toHTML();
} // end foreach } // end foreach
?>
</table> layoutFooterHTML($tag);
<?php
} // end function } // end function
} // end class } // end class
@@ -2371,21 +2439,20 @@ class AcademicDisplay {
uasort($entries, ORDER_FUNCTION); uasort($entries, ORDER_FUNCTION);
if (count($entries)>0) { if (count($entries)>0) {
echo "\n".'<div class="btb-header">'.$title.'</div>'."\n"; echo "\n".'<div class="btb-header">'.$title.'</div>'."\n";
echo '<table class="result">'."\n"; $tag = layoutHeaderHTML();
// by default the abbreviation is incermented over all // by default the abbreviation is incremented over all searches
// searches
// since we don't know before hand all section, we can not index in decreasing order // since we don't know before hand all section, we can not index in decreasing order
static $count; static $count;
if ($count == NULL) { $count = 1; } // init if ($count == NULL) { $count = 1; } // init
$id = $count; $id = $count;
foreach ($entries as $bib) { foreach ($entries as $bib) {
$bib->setIndex('['.($id++).']'); $bib->setIndex($id++);
$bib->toTR(); $bib->toHTML();
} // end foreach } // end foreach
$count = @$count + count($entries); $count = @$count + count($entries);
echo '</table>'; layoutFooterHTML($tag);
} }
} }
@@ -3176,18 +3243,18 @@ class PagedDisplay {
} }
$this->menu($less, $more); $this->menu($less, $more);
echo '<table class="result" >'; $tag = layoutHeaderHTML();
for ($i = 0; $i < PAGE_SIZE; $i++) { for ($i = 0; $i < PAGE_SIZE; $i++) {
$index = ($this->page-1)*PAGE_SIZE + $i; $index = ($this->page-1)*PAGE_SIZE + $i;
if (isset($this->entries[$index])) { if (isset($this->entries[$index])) {
$bib = $this->entries[$index]; $bib = $this->entries[$index];
$bib->toTR(); $bib->toHTML();
} else { } else {
//break; //break;
} }
} // end foreach } // end foreach
echo '</table>'; layoutFooterHTML($tag);
$this->menu($less, $more); $this->menu($less, $more);
} }