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
+123 -56
View File
@@ -3,6 +3,7 @@
URL: http://www.monperrus.net/martin/bibtexbrowser/
Feedback & Bug Reports: martin.monperrus@gmail.com
(C) 2013 Matthieu Guillaumin
(C) 2006-2012 Martin Monperrus
(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
@@ -117,6 +118,8 @@ define('BIBTEXBROWSER','v__GITHUB__');
@define('METADATA_DC',true);
@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
// this is usually resolved to bibtexbrowser.php
// but can be overridden in bibtexbrowser.local.php
@@ -240,7 +243,7 @@ function _zetDB($bibtex_filenames) {
&& is_readable($compiledbib)
&& 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
if (flock($f,LOCK_EX)) {
$s = filesize($compiledbib);
@@ -1243,21 +1246,29 @@ class BibEntry {
}
/** Returns the abbreviation. */
function getAbbrv() {
function getRawAbbrv() {
if (ABBRV_TYPE == 'index') return $this->index;
if (ABBRV_TYPE == 'none') return '';
if (ABBRV_TYPE == 'key') return '['.$this->getKey().']';
if (ABBRV_TYPE == 'year') return '['.$this->getYear().']';
if (ABBRV_TYPE == 'key') return $this->getKey();
if (ABBRV_TYPE == 'year') return $this->getYear();
if (ABBRV_TYPE == 'x-abbrv') {
if ($this->hasField('x-abbrv')) {return $this->getField('x-abbrv');}
return $this->abbrv;
}
// otherwise it is a user-defined function in bibtexbrowser.local.php
$f = ABBRV_TYPE;
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]) */
function setAbbrv($abbrv) {
@@ -1296,37 +1307,45 @@ class BibEntry {
}
/** Outputs an HTML line (<tr>)with two TDS inside
*/
function toTR() {
echo '<tr class="bibline">';
echo '<td class="bibref">';
//echo '<a name="'.$this->getId().'"></a>';
echo $this->getAbbrv().'</td> ';
echo '<td class="bibitem">';
echo bib2html($this);
/** Outputs HTML line according to layout */
function toHTML() {
switch(LAYOUT) { // open row
case 'list':
echo '<li class="bibline" value="'.$this->getAbbrv().'">';
break;
case 'table':
echo '<tr class="bibline"><td class="bibref">';
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 bib2links($this);
switch(LAYOUT) { // close row
case 'list':
echo '</li>';
break;
case 'table':
echo '</td></tr>';
break;
case 'deflist':
echo '</dd></dl>';
break;
}
}
$href = 'href="'.$this->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
echo " <a".(BIBTEXBROWSER_BIB_IN_NEW_WINDOW?' target="_blank" ':'')." class=\"biburl\" title=\"".$this->getKey()."\" {$href}>[bibtex]</a>";
}
// returns an empty string if no url present
echo $this->getUrlLink();
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";
/** Create the entry anchor */
function anchor() {
echo '<a name="'.$this->getAbbrv().'"></a>';
}
/** 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*/
function bib2html(&$bibentry) {
$function = BIBLIOGRAPHYSTYLE;
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 */
function _DefaultBibliographySections() {
$function = BIBLIOGRAPHYSECTIONS;
@@ -2301,21 +2371,19 @@ class SimpleDisplay {
echo 'Options: '.@implode(',',$this->options).'<br/>';
}
?>
$tag = layoutHeaderHTML();
<table class="result" >
<?php
$count = count($this->entries);
$i=0;
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
$bib->setIndex('['.($count-($i++)).']');
$bib->toTR();
$bib->setIndex($count-($i++));
$bib->toHTML();
} // end foreach
?>
</table>
<?php
layoutFooterHTML($tag);
} // end function
} // end class
@@ -2371,21 +2439,20 @@ class AcademicDisplay {
uasort($entries, ORDER_FUNCTION);
if (count($entries)>0) {
echo "\n".'<div class="btb-header">'.$title.'</div>'."\n";
echo '<table class="result">'."\n";
$tag = layoutHeaderHTML();
// by default the abbreviation is incermented over all
// searches
// by default the abbreviation is incremented over all searches
// since we don't know before hand all section, we can not index in decreasing order
static $count;
if ($count == NULL) { $count = 1; } // init
$id = $count;
foreach ($entries as $bib) {
$bib->setIndex('['.($id++).']');
$bib->toTR();
$bib->setIndex($id++);
$bib->toHTML();
} // end foreach
$count = @$count + count($entries);
echo '</table>';
layoutFooterHTML($tag);
}
}
@@ -2397,7 +2464,7 @@ class AcademicDisplay {
foreach (_DefaultBibliographySections() as $section) {
$this->search2html($section['query'],$section['title']);
}
}
}
}
@@ -3176,18 +3243,18 @@ class PagedDisplay {
}
$this->menu($less, $more);
echo '<table class="result" >';
$tag = layoutHeaderHTML();
for ($i = 0; $i < PAGE_SIZE; $i++) {
$index = ($this->page-1)*PAGE_SIZE + $i;
if (isset($this->entries[$index])) {
$bib = $this->entries[$index];
$bib->toTR();
$bib->toHTML();
} else {
//break;
}
} // end foreach
echo '</table>';
layoutFooterHTML($tag);
$this->menu($less, $more);
}
@@ -3478,7 +3545,7 @@ class Dispatcher {
function keywords() { $this->query[Q_TAG]=$_GET[Q_TAG]; }
function author() {
function author() {
// Friday, October 29 2010
// changed from 'author' to '_author'
// in order to search at the same time "Joe Dupont" an "Dupont, Joe"
@@ -3573,4 +3640,4 @@ class Dispatcher {
$class = BIBTEXBROWSER_MAIN;// extension point
$main = new $class();
$main->main();
?>
?>