Bugzilla – Attachment 42168 Details for
Bug 13642
Adding new features for Dublin Core metadata
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 13642 [ENH] Adding new features for Dublin Core metadata
Bug-13642-ENH-Adding-new-features-for-Dublin-Core-.patch (text/plain), 159.22 KB, created by
Héctor Eduardo Castro Avalos
on 2015-09-01 14:42:20 UTC
(
hide
)
Description:
Bug 13642 [ENH] Adding new features for Dublin Core metadata
Filename:
MIME Type:
Creator:
Héctor Eduardo Castro Avalos
Created:
2015-09-01 14:42:20 UTC
Size:
159.22 KB
patch
obsolete
>From bc4e8e9d825a697308ad0e99b4075d1cf507a589 Mon Sep 17 00:00:00 2001 >From: Hector Castro <hector.hecaxmmx@gmail.com> >Date: Mon, 20 Apr 2015 15:09:11 -0600 >Subject: [PATCH] Bug 13642 [ENH] Adding new features for Dublin Core metadata > >When Koha export a bibliographic record to DC, makes it in XML format. This XML not follows the DC-XML recommendations as should be: elements in uppercase eg. dc:Date, dc:Creator, section 4.2, recommendation 4 explain that "The property names for the 15 DC elements should be all lower-case." eg. dc:date, dc:creator" and section "4.3 Example - a simple DC record", xsi:schemaLocation="http://example.org/myapp/ http://example.org/myapp/schema.xsd" schema does not exist. >The recommendation can be consulted at <http://dublincore.org/documents/dc-xml-guidelines/>. >This new feature, adds an ability to export Dublin Core metadata to XML and RDF (including rdfxml, rdfjson, ntriples, turtle, etc.) > >Test plan >--------------- >1) Download Dublin Core file. Open up the file, and make sure that the document not follows the DC-XML recommendations as should be. >2) Apply patches. >3) Go to whichever bib record in OPAC or staff and click on Save > Dublin Core. A modal will display, prove all options. >4) Change the system preference 'Opac ExportOptions' by enabling and disabling Dublin Core and try to download a record in the OPAC. >5) Try several bibliographic records in any format (book, magazine, DVD, etc.) to confirm that properly exported. >6) RDF/XML can be validated per RDF Validator W3C. >7) DC-XML cannot valid if not exist a valid XSD schema. >8) OAI-DC can be validated using <http://www.freeformatter.com/xml-validator-xsd.html> and the proper schema <http://www.openarchives.org/OAI/2.0/oai_dc.xsd> typed in text field for URL. >9) Since unit test fail last time, test with prove t/db_dependent/Record.t > >Sponsored-by: Universidad de El Salvador > >Signed-off-by: Hector Castro <hector.hecaxmmx@gmail.com> >XML::Entities, HTML::Entities and, HTML::Entities::Numbered were eliminated from patch, use instead C4::Record::_entity_encode, RDF::Helper has been eliminated too. >--- > C4/Installer/PerlDependencies.pm | 5 + > C4/Record.pm | 127 ++- > Koha/DublinCore.pm | 1011 ++++++++++++++++++++ > catalogue/export.pl | 36 +- > debian/control | 8 +- > .../intranet-tmpl/prog/en/css/staff-global.css | 10 + > .../intranet-tmpl/prog/en/includes/cat-toolbar.inc | 2 +- > .../prog/en/modules/catalogue/detail.tt | 159 ++- > koha-tmpl/opac-tmpl/bootstrap/css/opac.css | 2 +- > .../bootstrap/en/includes/opac-detail-sidebar.inc | 5 +- > .../opac-tmpl/bootstrap/en/modules/opac-detail.tt | 162 ++++ > koha-tmpl/opac-tmpl/bootstrap/js/script.js | 2 +- > opac/opac-export.pl | 36 +- > t/db_dependent/Record.t | 39 +- > 14 files changed, 1545 insertions(+), 59 deletions(-) > create mode 100644 Koha/DublinCore.pm > >diff --git a/C4/Installer/PerlDependencies.pm b/C4/Installer/PerlDependencies.pm >index f7a1bd9..abb1ef0 100644 >--- a/C4/Installer/PerlDependencies.pm >+++ b/C4/Installer/PerlDependencies.pm >@@ -767,6 +767,11 @@ our $PERL_DEPS = { > 'required' => '0', > 'min_ver' => '0.614', > }, >+ 'RDF::Trine' => { >+ 'usage' => 'Core', >+ 'required' => '1', >+ 'min_ver' => '1.000', >+ }, > }; > > 1; >diff --git a/C4/Record.pm b/C4/Record.pm >index 5d894fa..2c6aac2 100644 >--- a/C4/Record.pm >+++ b/C4/Record.pm >@@ -25,7 +25,7 @@ use strict; > # please specify in which methods a given module is used > use MARC::Record; # marc2marcxml, marcxml2marc, changeEncoding > use MARC::File::XML; # marc2marcxml, marcxml2marc, changeEncoding >-use MARC::Crosswalk::DublinCore; # marc2dcxml >+use Koha::DublinCore; # marc2dcxml > use Biblio::EndnoteStyle; > use Unicode::Normalize; # _entity_encode > use C4::Biblio; #marc2bibtex >@@ -219,20 +219,34 @@ sub marcxml2marc { > > =head2 marc2dcxml - Convert from ISO-2709 to Dublin Core > >- my ($error,$dcxml) = marc2dcxml($marc,$qualified); >+ ($error,$marc) = marc2dcxml($marc, $type, $qualified, >+ $entities, $root, $xsi_schemaLocation, $rdf_subject, $rdf_format); > > Returns a DublinCore::Record object, will eventually return a Dublin Core scalar > >-FIXME: should return actual XML, not just an object >+FIXME: should return actual XML, not just an object (Koha::DublinCore return an XML) > > C<$marc> - an ISO-2709 scalar or MARC::Record object > >-C<$qualified> - specify whether qualified Dublin Core should be used in the input or output [0] >+C<$type> - the recommendation ( simple-dc-rdf, dc-rdf, dc-xml, oai-dc, srw_dc ) >+ >+C<$qualified> - specify whether simple or qualified Dublin Core should be used in output [0 or 1] >+ >+C<$entities> placing entities to 0 will codify only the five basic entities e.g., <, >, ", &, and &apos. Conversely if it is encoded to 1, all entities will coded into decimal >+ >+C<$root> root element for XML files >+ >+C<$xsi_schemaLocation> the xsischemaLocation for XML files. >+ >+C<$rdf_subject> Represent the main subject of RDF triples (for Koha the URI of the resource) >+ >+C<$rdf_format> Imply multiple formats for RDF (ntriples, nquads, rdfxml, rdfjson, ntriples-canonical, turtle) > > =cut > > sub marc2dcxml { >- my ($marc,$qualified) = @_; >+ my ( $marc, $type, $qualified, $entities, $root, $xsi_schemaLocation, $rdf_subject, >+ $rdf_format ) = @_; > my $error; > # test if it's already a MARC::Record object, if not, make it one > my $marc_record_obj; >@@ -246,24 +260,93 @@ sub marc2dcxml { > $error .="\nCreation of MARC::Record object failed: ".$MARC::File::ERROR; > } > } >- my $crosswalk = MARC::Crosswalk::DublinCore->new; >- if ($qualified) { >- $crosswalk = MARC::Crosswalk::DublinCore->new( qualified => 1 ); >- } >- my $dcxml = $crosswalk->as_dublincore($marc_record_obj); >- my $dcxmlfinal = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; >- $dcxmlfinal .= "<metadata >- xmlns=\"http://example.org/myapp/\" >- xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" >- xsi:schemaLocation=\"http://example.org/myapp/ http://example.org/myapp/schema.xsd\" >- xmlns:dc=\"http://purl.org/dc/elements/1.1/\" >- xmlns:dcterms=\"http://purl.org/dc/terms/\">"; >- >- foreach my $element ( $dcxml->elements() ) { >- $dcxmlfinal.="<"."dc:".$element->name().">".$element->content()."</"."dc:".$element->name().">\n"; >+ my $dcxml; >+ >+ SWITCH: >+ for ($type) { >+ if (/^simple-dc-rdf/) { >+ my $objectDC = Koha::DublinCore->new({ >+ type => 'rdf', >+ qualified => 0, >+ get_marc_record => $marc, >+ }); >+ >+ $objectDC->get_rdf_data({ >+ rdf_subject => $rdf_subject, >+ rdf_format => $rdf_format, >+ entities => 1, >+ }); >+ $dcxml = $objectDC->write_rdf(); >+ last SWITCH; >+ } >+ if (/^dc-rdf/) { >+ my $objectDC = Koha::DublinCore->new({ >+ type => 'rdf', >+ qualified => 1, >+ get_marc_record => $marc, >+ }); >+ >+ $objectDC->get_rdf_data({ >+ rdf_subject => $rdf_subject, >+ rdf_format => $rdf_format, >+ entities => 1, >+ }); >+ $dcxml = $objectDC->write_rdf(); >+ last SWITCH; >+ } >+ if (/^dc-xml/) { >+ my $objectDC = Koha::DublinCore->new({ >+ type => 'xml', >+ qualified => $qualified, >+ get_marc_record => $marc, >+ }); >+ >+ $objectDC->get_xml_data({ >+ root => $root, >+ xsi_schemaLocation => $xsi_schemaLocation, >+ entities => 1, >+ }); >+ $dcxml = $objectDC->write_xml(); >+ last SWITCH; >+ } >+ if (/^oai-dc/) { >+ my $objectDC = Koha::DublinCore->new({ >+ type => 'xml', >+ qualified => 0, >+ get_marc_record => $marc, >+ }); >+ >+ $objectDC->get_xml_data({ >+ root => 'oai_dc:dc', >+ xsi_schemaLocation => 'http://www.openarchives.org/OAI/2.0/oai_dc/' . >+ ' http://www.openarchives.org/OAI/2.0/oai_dc.xsd', >+ entities => 0, >+ opt_namespace => 'oai_dc', >+ opt_namespace_url => 'http://www.openarchives.org/OAI/2.0/oai_dc/', >+ }); >+ $dcxml = $objectDC->write_xml(); >+ last SWITCH; >+ } >+ if (/^srw_dc/) { >+ my $objectDC = Koha::DublinCore->new({ >+ type => 'xml', >+ qualified => 0, >+ get_marc_record => $marc, >+ }); >+ >+ $objectDC->get_xml_data({ >+ root => 'srw_dc:dc', >+ xsi_schemaLocation => 'info:srw/schema/1/dc-schema' . >+ ' http://www.loc.gov/standards/sru/resources/dc-schema.xsd', >+ entities => 0, >+ opt_namespace => 'srw_dc', >+ opt_namespace_url => 'info:srw/schema/1/dc-schema', >+ }); >+ $dcxml = $objectDC->write_xml(); >+ last SWITCH; >+ } > } >- $dcxmlfinal .= "\n</metadata>"; >- return ($error,$dcxmlfinal); >+ return ( $error, $dcxml ); > } > > =head2 marc2modsxml - Convert from ISO-2709 to MODS >diff --git a/Koha/DublinCore.pm b/Koha/DublinCore.pm >new file mode 100644 >index 0000000..ad7b073 >--- /dev/null >+++ b/Koha/DublinCore.pm >@@ -0,0 +1,1011 @@ >+#!/usr/bin/perl >+package Koha::DublinCore; >+ >+# >+# This file is part of Koha. >+# >+# Copyright (C) 2014 Universidad de El Salvador, >+# Facultad Multidisciplinaria Oriental >+# >+# Koha is free software; you can redistribute it and/or modify it >+# under the terms of the GNU General Public License as published by >+# the Free Software Foundation; either version 3 of the License, or >+# (at your option) any later version. >+# >+# Koha is distributed in the hope that it will be useful, but >+# WITHOUT ANY WARRANTY; without even the implied warranty of >+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >+# GNU General Public License for more details. >+# >+# You should have received a copy of the GNU General Public License >+# along with Koha; if not, see <http://www.gnu.org/licenses>. >+# >+ >+=head1 NAME >+ >+Koha::DublinCore - transform the values of MARC::Crosswalk::DublinCore >+into metadata in XML or RDF format. >+ >+=head1 SYNOPSIS >+ >+=head2 XML-DC >+ >+ use Koha::DublinCore; >+ use MARC::File::USMARC; >+ my $batch = MARC::File::USMARC->in('in.mrc'); >+ >+ #the $record will be a MARC::Record object. >+ my $record = $batch->next(); >+ >+ #Simple DC-XML >+ my $objectDC = Koha::DublinCore->new({ >+ type => 'xml', >+ qualified => 0, >+ get_marc_record => $record}); >+ >+ #Qualified DC-XML >+ my $objectDC = Koha::DublinCore->new({ >+ type => 'xml', >+ qualified => 1, >+ get_marc_record => $record}); >+ >+ #After call constructor you need to pass the root element and >+ #the schema in .xsd format. If you prefer or you don't know nothing >+ #about it pass the method in blank, i.e., without arguments. >+ #Also you can determine if you want to encode with xml entities or >+ #just with the five basics entities. >+ #Set entities to 0 for the five basics or 1 to encode with the >+ #complete xml entities. >+ $objectDC->get_xml_data({ >+ root => 'metadata', >+ xsi_schemaLocation => 'http://example.org/myapp/' . >+ ' http://example.org/myapp/schema.xsd', >+ }); >+ #This print your xml file in STDOUT >+ my $XML-DC = $objectDC->write_xml(); >+ print $XML-DC; >+ >+ #Close the file according to MARC::File::USMARC >+ $batch->close(); >+ undef $batch; >+ >+ #Or if you want to generate a file >+ open (OUTPUT, '> dc2xml.xml') or die $!; >+ print OUTPUT $XML-DC; >+ close(OUTPUT); >+ >+=head2 DC-RDF >+ >+ use Koha::DublinCore; >+ use MARC::File::USMARC; >+ my $marc = MARC::File::USMARC->in('in.mrc'); >+ my $record = $marc->next(); >+ >+ #Simple DC-RDF is not used but not deprecated, DublinCore >+ #can generate it as follow: >+ my $objectDC = Koha::DublinCore->new({ >+ type => 'rdf', >+ qualified => 0, >+ get_marc_record => $record}); >+ >+ #DC-RDF >+ my $objectDC = Koha::DublinCore->new({ >+ type => 'rdf', >+ qualified => 1, >+ get_marc_record => $record}); >+ >+ #The get_rdf_data method for RDF does not need to use the root element >+ #and the schema, but you need to declare the resource being described, >+ #i.e., the record. >+ #Note: For Koha is the IRI identifier of the record >+ $objectDC->get_rdf_data({ >+ rdf_subject => 'http://opac.mydomain.edu/cgi-bin/koha/opac-detail.pl?biblionumber=17589', >+ }); >+ >+ my $XML-RDF = $objectDC->write_rdf(); >+ print $XML-RDF; >+ #Close the file according to MARC::File::USMARC >+ $batch->close(); >+ undef $marc; >+ >+=head1 DESCRIPTION >+ >+The Koha::DublinCore defines the interface to transform >+and manipulate MARC records into DC-XML or DC-RDF recommendation. >+This package transform MARC records to XML or RDF/XML Dublin Core >+and follows the recommendations listed below: >+ >+L<DC-XML-GUIDELINES [DCMI Recommendation]|http://dublincore.org/documents/dc-xml-guidelines/> >+ >+L<Expressing Simple Dublin Core in RDF-XML|http://dublincore.org/documents/dcmes-xml/> >+This recommendation is superseded by DC-RDFrecommendation but not obsoleted at all. >+ >+L<DC-RDF [DCMI Recommendation]|http://dublincore.org/documents/dc-rdf/> >+ >+=cut >+ >+use Modern::Perl; >+use Carp; >+use utf8; >+use version; >+ >+BEGIN { >+ require Exporter; >+ >+ # set the version for version checking >+ our $VERSION = version->declare("v0.01"); >+ >+ # Inherit from Exporter to export functions and variables >+ our @ISA = qw(Exporter); >+ >+ # Functions and variables which are exported by default >+ our @EXPORT = qw(new get_xml_data get_rdf_data write_xml write_rdf); >+ >+ # Functions and variables which can be optionally exported >+ our @EXPORT_OK = >+ qw(type qualified get_marc_record root xsi_schemaLocation rdf_subject rdf_format opt_namespace opt_namespace_url); >+ >+} >+ >+use MARC::File::USMARC; >+use MARC::Crosswalk::DublinCore; >+use XML::LibXML; >+use C4::Record; >+use RDF::Trine; >+use base qw(Class::Accessor); >+__PACKAGE__->mk_accessors( >+ qw(type qualified get_marc_record root xsi_schemaLocation rdf_subject rdf_format entities opt_namespace opt_namespace_url) >+); >+ >+# Defining some constants >+my $xsi_schema = qq(http://www.w3.org/2001/XMLSchema-instance); >+my $unqualified = qq(http://purl.org/dc/elements/1.1/); >+my $qualified = qq(http://purl.org/dc/terms/); >+my $dcam = qq(http://purl.org/dc/dcam/); >+my $rdfNS = qq(http://www.w3.org/1999/02/22-rdf-syntax-ns#); >+my @elementupcase = >+ qw/tableOfContents dateAccepted dateCopyrighted dateSubmitted isVersionOf hasVersion isReplacedBy isRequiredBy isPartOf hasPart isReferencedBy isFormatOf hasFormat conformsTo accrualMethod accrualPeriodicity accrualPolicy instructionalMethod rightsHolder educationLevel accessRights bibliographicCitation/; >+my $map; >+ >+=head2 METHODS >+ >+=over 12 >+ >+=item C<new> >+ >+Return a new Koha::DublinCore object. >+This constructor sets the output type (RDF or XML), the level of the standard (Simple DC or Qualified DC) and the MARC record to be transformed to DC. >+ >+ my $objectDC = Koha::DublinCore->new({ >+ type => 'rdf', >+ qualified => 0, >+ get_marc_record => $record}); >+ >+=cut >+ >+sub new { >+ my ( $class, $args ) = @_; >+ $args = {} unless defined $args; >+ return bless( $args, $class ); >+} >+ >+=item C<get_xml_data> >+ >+This method is just for DC-XML: Fetch the xml root element and the schema in .xsd format. >+ >+ $objectDC->get_xml_data({ >+ root => 'metadata', >+ xsi_schemaLocation => 'http://example.org/myapp/ http://example.org/myapp/schema.xsd', >+ entities => 1, >+ opt_namespace => 'oai_dc', >+ opt_namespace_url => 'http://www.openarchives.org/OAI/2.0/oai_dc/', >+ }); >+ >+The entities argument is for extended xml entities, i.e., placing entities to zero will codify only the five basic entities e.g., <, >, ", &, and &apos. Conversely if it is encoded to one, all entities will coded into decimal. >+ >+Additionally, has been included the opt_namespace and opt_namespace_url arguments to include another XML name space, like OAI-DC or SRW-DC. >+ >+NOTE: This method is only for use of the DC-XML recommendation, i.e., type => 'xml'. >+See C<new> method or the section SYNOPSIS. >+ >+=cut >+ >+sub get_xml_data { >+ >+ my $self = shift; >+ my ($args) = @_; >+ >+ if (@_) { >+ $self->root( $args->{root} ); >+ $self->xsi_schemaLocation( $args->{xsi_schemaLocation} ); >+ $self->entities( $args->{entities} ); >+ $self->opt_namespace( $args->{opt_namespace} ); >+ $self->opt_namespace_url( $args->{opt_namespace_url} ); >+ } >+ >+ #if data not filled >+ $self->{root} = "metadata" unless ( defined $self->{root} ); >+ $self->{entities} = 0 unless ( defined $self->{entities} ); >+ my %dataxml = ( >+ xmlroot => $self->{root}, >+ entities => $self->{entities}, >+ opt_namespace => $self->{opt_namespace}, >+ opt_namespace_url => $self->{opt_namespace_url}, >+ ); >+ >+ if ( exists $self->{xsi_schemaLocation} ) { >+ $dataxml{'xsi_schemaLocation'} = $self->{xsi_schemaLocation}; >+ } >+ if ( exists $self->{xsi_schemaLocation} ) { >+ $dataxml{'opt_namespace'} = $self->{opt_namespace}; >+ } >+ if ( exists $self->{xsi_schemaLocation} ) { >+ $dataxml{'opt_namespace_url'} = $self->{opt_namespace_url}; >+ } >+ return \%dataxml; >+} >+ >+=item C<get_rdf_data> >+ >+This method is only for DC-RDF: Fetch the IRI identifier of the resource being described. As well, you can pass the format you want to generate with the rdf, by default the DC-RDF specify RDF/XML but RDF can represent in other formats listed below: >+ >+. ntriples >+ >+. nquads >+ >+. rdfxml >+ >+. rdfjson >+ >+. ntriples-canonical >+ >+. turtle >+ >+ $objectDC->get_rdf_data({ >+ rdf_subject => 'http://opac.mydomain.edu/cgi-bin/koha/opac-detail.pl?biblionumber=17589', >+ rdf_format => 'rdfxml', >+ entities => 0|1, >+ }); >+ >+NOTE: The entities is needed only for rdfxml value and is used like C<get_xml_data> method. >+ >+=cut >+ >+sub get_rdf_data { >+ >+ my $self = shift; >+ my ($args) = @_; >+ >+ if (@_) { >+ $self->rdf_subject( $args->{rdf_subject} ); >+ $self->rdf_format( $args->{rdf_format} ); >+ $self->entities( $args->{entities} ); >+ } >+ >+ #if data not filled >+ $self->{rdf_subject} = "http://koha-community.org/" >+ unless ( defined $self->{rdf_subject} ); >+ $self->{rdf_format} = "rdfxml" unless ( defined $self->{rdf_format} ); >+ $self->{entities} = 0 unless ( defined $self->{entities} ); >+ my %rdfdescription = ( >+ rdf_subject => $self->{rdf_subject}, >+ rdf_format => $self->{rdf_format}, >+ entities => $self->{entities}, >+ ); >+ >+ return \%rdfdescription; >+} >+ >+=item C<conversion_to_dc> >+ >+Get the MARC record and return a Dublin Core elements, passed as argument in dc_order_execution method. >+ >+USAGE: >+ my dc = $self->conversion_to_dc(); >+ $self->dc_order_execution ($dc, $dcxml, $root); >+ >+=cut >+ >+sub conversion_to_dc { >+ >+ my $self = shift; >+ my $marc_record_obj = $self->get_marc_record(); >+ my $crosswalk; >+ my $dc; >+ >+ #if data not filled >+ $self->qualified(0) unless ( exists $self->{qualified} ); >+ if ( $self->qualified() != 0 and $self->qualified() != 1 ) >+ { >+ croak "Only the 0 or 1 values are accepted\n" . >+ "Set qualified => " . $self->qualified() . " is no good, stopped"; >+ } >+ if ( $self->qualified() == 1 ) { >+ $crosswalk = MARC::Crosswalk::DublinCore->new( qualified => 1 ); >+ } >+ elsif ( $self->qualified() == 0 ) { >+ $crosswalk = MARC::Crosswalk::DublinCore->new( qualified => 0 ); >+ } >+ if ( $marc_record_obj =~ /^MARC::Record/ ) { >+ $dc = $crosswalk->as_dublincore($marc_record_obj); >+ } >+ else { >+ croak "MARC::Record object failed or not a MARC::Record\n" . >+ "Stopped due get_marc_record => is not a MARC::Record"; >+ } >+ >+ return $dc; >+ >+} >+=item C<write_xml> >+ >+Return the xml object as string. >+ >+NOTE: This method is only for use of the DC-XML recommendation, i.e., type => 'xml'. >+See C<new> and C<get_xml_data> methods or the section SYNOPSIS. >+ >+=cut >+ >+sub write_xml { >+ my $self = shift; >+ my $dataxml = $self->get_xml_data(); >+ my $dc = $self->conversion_to_dc(); >+ >+ #Looking for bad data >+ if ( $self->type() ne 'xml' and $self->type() ne 'rdf' ) >+ { >+ croak "Only the xml or rdf values are accepted\n" . >+ "Set type => " . $self->type() . " is no good, stopped"; >+ } >+ elsif ( $self->type() eq 'rdf' ) >+ { >+ croak "The constructor specified rdf\n" . >+ "Cannot use this method with rdf. This is no good, stopped"; >+ } >+ >+ if ( $self->entities() != 0 and $self->entities() != 1 ) >+ { >+ croak "Only the 0 or 1 values are accepted\n" . >+ "Set entities => " . $self->entities() . " is no good, stopped"; >+ } >+ >+ #Creating XML object >+ my $doc = XML::LibXML::Document->new( '1.0', 'utf-8' ); >+ my $root = $doc->createElement( $dataxml->{'xmlroot'} ); >+ $root->setNamespace( $xsi_schema, 'xsi', 0 ); >+ >+ if ( defined $dataxml->{'opt_namespace'} ) { >+ $root->setNamespace( $dataxml->{'opt_namespace_url'}, >+ $dataxml->{'opt_namespace'}, 0 ); >+ } >+ >+ if ( $self->type() eq 'xml' ) { >+ if ( $self->qualified() == 0 ) { >+ if ( defined $dataxml->{'xsi_schemaLocation'} ) { >+ $root->setAttribute( >+ 'xsi:schemaLocation' => $dataxml->{'xsi_schemaLocation'} ); >+ $root->setNamespace( $unqualified, 'dc', 0 ); >+ $self->dc_order_execution( $dc, $doc, $root ); >+ } >+ else { >+ $root->setNamespace( $unqualified, 'dc', 0 ); >+ $self->dc_order_execution( $dc, $doc, $root ); >+ } >+ } >+ elsif ( $self->qualified() == 1 ) { >+ if ( defined $dataxml->{'xsi_schemaLocation'} ) { >+ $root->setAttribute( >+ 'xsi:schemaLocation' => $dataxml->{'xsi_schemaLocation'} ); >+ $root->setNamespace( $unqualified, 'dc', 0 ); >+ $root->setNamespace( $qualified, 'dcterms', 0 ); >+ $self->dc_order_execution( $dc, $doc, $root ); >+ } >+ else { >+ $root->setNamespace( $unqualified, 'dc', 0 ); >+ $root->setNamespace( $qualified, 'dcterms', 0 ); >+ $self->dc_order_execution( $dc, $doc, $root ); >+ } >+ } >+ } >+ >+ $doc->setDocumentElement($root); >+ >+ #Enabling or desabling entities and print the xml and, decoding string to utf8 >+ if ( $dataxml->{'entities'} == 1 ) { >+ my $serialized_data = $doc->toString(1); >+ utf8::decode($serialized_data); >+ my ($dcxml_entity_encoded) = C4::Record::_entity_encode($serialized_data); >+ $serialized_data = $dcxml_entity_encoded; >+ return $serialized_data; >+ } >+ else { >+ return $doc->toString(1); >+ } >+} >+ >+=item C<write_rdf> >+ >+Return the rdf object as string. >+ >+NOTE: This method is only for use of the DC-RDF recommendation, i.e., type => 'rdf'. >+See C<new> and C<get_rdf_data> methods or the section SYNOPSIS. >+ >+=cut >+ >+sub write_rdf { >+ my $self = shift; >+ my $rdfdescription = $self->get_rdf_data(); >+ my $dc = $self->conversion_to_dc(); >+ my $serializer; >+ my %namespaces; >+ >+ #Looking for bad data >+ if ( $self->type() ne 'xml' and $self->type() ne 'rdf' ) >+ { >+ croak "Only the xml or rdf values are accepted\n" . >+ "Set type => " . $self->type() . " is no good, stopped"; >+ } >+ elsif ( $self->type() eq 'xml' ) { >+ croak "The constructor specified xml\n" . >+ "Cannot use this method with xml. This is no good, stopped"; >+ } >+ >+ if ( $self->entities() != 0 and $self->entities() != 1 ) >+ { >+ croak "Only the 0 or 1 values are accepted\n" . >+ "Set entities => " . $self->entities() . " is no good, stopped"; >+ } >+ >+ # Creating the triple store in temporary data >+ my $store = RDF::Trine::Store::Memory->new(); >+ >+ # Creating the model >+ my $rdf = RDF::Trine::Model->new($store); >+ >+ # Creating the subject >+ my $subject = >+ RDF::Trine::Node::Resource->new( $rdfdescription->{'rdf_subject'} ); >+ >+ $namespaces{'rdf'} = $rdfNS; >+ >+ if ( $self->qualified() == 0 ) { >+ >+ # Declaring all namespaces in a hash >+ $namespaces{'dc'} = $unqualified; >+ } >+ else { >+ >+ # Declaring all namespaces in a hash >+ $namespaces{'dcterms'} = $qualified; >+ $namespaces{'dcam'} = $dcam; >+ } >+ >+ # Creating namespaces >+ $map = RDF::Trine::NamespaceMap->new( \%namespaces ); >+ >+ if ( $self->type() eq 'rdf' ) { >+ $self->dc_order_execution( $dc, $rdf, $subject ); >+ } >+ >+ #Enabling or desabling entities and print the xml and, decoding string to utf8 >+ if ( $rdfdescription->{'rdf_format'} eq 'rdfxml' ) { >+ if ( $rdfdescription->{'entities'} == 1 ) { >+ $serializer = >+ RDF::Trine::Serializer::RDFXML->new( >+ namespaces => {%namespaces} ); >+ my $serialized_data = $serializer->serialize_model_to_string($rdf); >+ utf8::decode($serialized_data); >+ my ($dcxml_entity_encoded) = C4::Record::_entity_encode($serialized_data); >+ return $serialized_data = $dcxml_entity_encoded; >+ } >+ else { >+ $serializer = >+ RDF::Trine::Serializer::RDFXML->new( >+ namespaces => {%namespaces} ); >+ return $serializer->serialize_model_to_string($rdf); >+ } >+ } >+ elsif ( $rdfdescription->{'rdf_format'} eq 'turtle' ) { >+ $serializer = >+ RDF::Trine::Serializer::Turtle->new( namespaces => {%namespaces} ); >+ return $serializer->serialize_model_to_string($rdf); >+ } >+ else { >+ $serializer = >+ RDF::Trine::Serializer->new( $rdfdescription->{'rdf_format'} ); >+ return $serializer->serialize_model_to_string($rdf); >+ } >+} >+ >+=item C<upper_or_lowercase> >+ >+This subroutine define if is necessary to convert lowercase some qualifiers or let them as crosswalk method basis >+ >+USAGE: upper_or_lowercase (element->qualifier()) >+ >+=cut >+ >+sub upper_or_lowercase { >+ >+ >+ my $dcelement = $_[0]; >+ my $count = 0; >+ my $result; >+ while ( $count <= $#elementupcase ) { >+ if ( $elementupcase[$count] eq $dcelement ) { >+ $result = $dcelement; >+ last; >+ } >+ elsif ( $dcelement ne $elementupcase[$count] ) { >+ $result = lc($dcelement); >+ $count++; >+ next; >+ } >+ } >+ >+ return $result; >+ >+} >+ >+=item C<xml_constructor> >+ >+xml_constructor ( doc, root, namespace, attr, element_name, element_content, element_qualifier, element_scheme ) >+ >+USAGE: define all posible elements (name, content, qualifier, scheme) as neccesary >+doc: the XML object >+root: append root to doc >+namespace: defined as "dc" or "dcterms" >+attr: a boolean value to determinate xsi:type xml namespace for dcterms >+Examples: >+xml_constructor ( $dcxml, $root, "dc", 0, element->name(), element->content() ); >+xml_constructor ( $dcxml, $root, "dcterms", 1, element->name(), element->content(), $element->qualifier() ); >+ >+NOTE: This is a routine not a method. >+ >+=cut >+ >+sub xml_constructor { >+ >+ my ( $doc, $root, $namespace, $attr, $element_name, $element_content, >+ $element_qualifier, $element_scheme ) >+ = @_; >+ >+ # This scalar is used for deleting spaces in scheme elements >+ my $deletespaces; >+ >+ # This scalar is used for making upper or lowercase the qualifier elements >+ my $lowercase; >+ my $tagxml; >+ >+ if ( $namespace eq "dc" ) { >+ $lowercase = lc($element_name); >+ } >+ elsif ( $namespace eq "dcterms" ) { >+ $lowercase = upper_or_lowercase($element_qualifier); >+ >+ #replacing spacial to spatial, bug from dublin or crosswalk. >+ $lowercase =~ s/spacial/spatial/; >+ } >+ >+ if ( ( $namespace eq "dc" or "dcterms" ) and $attr == 0 ) { >+ >+ # This will do something like: <dc:title>Title</dc:title> >+ $tagxml = XML::LibXML::Element->new($lowercase); >+ $tagxml->setNamespace( undef, $namespace, 1 ); >+ $tagxml->appendTextNode($element_content); >+ $root->appendChild($tagxml); >+ } >+ elsif ( ( $namespace eq "dcterms" ) and $attr == 1 ) { >+ >+# This will do something like: <dcterms:spatial xsi:type="dcterms:ISO3166">us</dcterms:spatial> >+ $deletespaces = $element_scheme; >+ $deletespaces =~ s/\s//; >+ $tagxml = XML::LibXML::Element->new($lowercase); >+ $tagxml->setNamespace( undef, $namespace, 1 ); >+ my $attribute = $namespace . ':' . $deletespaces; >+ $tagxml->setAttribute( 'xsi:type', $attribute ); >+ $tagxml->appendTextNode($element_content); >+ $root->appendChild($tagxml); >+ } >+ elsif ( ( $namespace eq "dc" ) and $attr == 1 ) { >+ >+# This will do something like: <dc:subject xsi:type="dcterms:LCSH">Water supply.</dc:subject> >+ if ( $element_scheme ne "DCMI Type Vocabulary" ) >+ { #Dublin core returns DCMI Type Vocabulary >+ $deletespaces = $element_scheme; >+ $deletespaces =~ s/\s//; >+ $tagxml = XML::LibXML::Element->new($lowercase); >+ $tagxml->setNamespace( undef, $namespace, 1 ); >+ my $attribute = 'dcterms:' . $deletespaces; >+ $tagxml->setAttribute( 'xsi:type', $attribute ); >+ $tagxml->appendTextNode($element_content); >+ $root->appendChild($tagxml); >+ } >+ elsif ( $element_scheme eq "DCMI Type Vocabulary" ) >+ { #Changing for DCMIType >+ # This will do something like: <dc:type xsi:type="dcterms:DCMIType">Text</dc:type> >+ $tagxml = XML::LibXML::Element->new($lowercase); >+ $tagxml->setNamespace( undef, $namespace, 1 ); >+ $tagxml->setAttribute( 'xsi:type', 'dcterms:DCMIType' ); >+ $tagxml->appendTextNode($element_content); >+ $root->appendChild($tagxml); >+ } >+ } #if...elsif >+ >+ return $tagxml; >+ >+} #subroutine >+ >+=item C<rdf_constructor> >+ >+xml_constructor ( rdf, subject, namespace, attr, element_name, element_content, element_qualifier, element_scheme ) >+ >+USAGE: define all posible elements (name, content, qualifier, scheme) as neccesary >+rdf: the RDF object >+subject: the subject for the triples >+namespace: defined as "dc" or "dcterms". This is for Simple DC or DC-RDF recommendations. >+attr: a boolean value to determine the nodeID attribute for dcterms >+ >+NOTE: This is a routine not a method. >+ >+=cut >+ >+sub rdf_constructor { >+ >+ my ( $rdf, $subject, $namespace, $attr, $element_name, $element_content, >+ $element_qualifier, $element_scheme ) >+ = @_; >+ >+ #This scalar is used for deleting spaces in scheme elements >+ my $deletespaces; >+ >+ #This scalar is used for making upper or lowercase the qualifier elements >+ my $lowercase; >+ >+ if ( $namespace eq "dc" ) { >+ $lowercase = lc($element_name); >+ } >+ elsif ( $namespace eq "dcterms" ) { >+ $lowercase = upper_or_lowercase($element_qualifier); >+ >+ #replacing spacial to spatial, bug from dublin or crosswalk. >+ $lowercase =~ s/spacial/spatial/; >+ } >+ >+ if ( ( $namespace eq "dc" or "dcterms" ) and $attr == 0 ) { >+ >+ # This will do something like: <dc:title>Title</dc:title> >+ my $predicate = undef; >+ if ( $namespace eq "dc" ) { >+ $predicate = $map->dc($lowercase); >+ } >+ else { >+ $predicate = $map->dcterms($lowercase); >+ } >+ my $object = RDF::Trine::Node::Literal->new($element_content); >+ my $statement = >+ RDF::Trine::Statement->new( $subject, $predicate, $object ); >+ $rdf->add_statement($statement); >+ } >+ elsif ( ( $namespace eq "dc" ) and $attr == 2 ) { >+ >+ # This will do something like: <dcterms:title>Title</dcterms:title> >+ my $predicate = $map->dcterms($lowercase); >+ my $object = RDF::Trine::Node::Literal->new($element_content); >+ my $statement = >+ RDF::Trine::Statement->new( $subject, $predicate, $object ); >+ $rdf->add_statement($statement); >+ } >+ elsif ( ( $namespace eq "dc" ) and $attr == 1 ) { >+ $deletespaces = $element_scheme; >+ $deletespaces =~ s/\s//; >+ SWITCH: >+ for ($element_scheme) { >+ if (/^ISO 3166/) { >+ >+ # Dublin core returns DCMI Type Vocabulary >+ # This will do something like: >+ # <rdf:Description rdf:nodeID="country"> >+ # <dcam:memberOf rdf:resource="http://purl.org/dc/terms/ISO3166"/> >+ # <rdf:value>us</rdf:value> >+ # </rdf:Description> >+ # <dcterms:spatial rdf:nodeID="country"/> >+ my $objectbnode = RDF::Trine::Node::Blank->new('country'); >+ my $predicate = $map->dcterms($lowercase); >+ my $object = RDF::Trine::Node::Literal->new($element_content); >+ my $dcam_member_of = $map->dcam('memberOf'); >+ my $resource_schema = $map->dcterms($deletespaces); >+ my $rdf_value = $map->rdf('value'); >+ my $statement1 = >+ RDF::Trine::Statement->new( $subject, $predicate, >+ $objectbnode ); >+ my $statement2 = >+ RDF::Trine::Statement->new( $objectbnode, $dcam_member_of, >+ $resource_schema ); >+ my $statement3 = >+ RDF::Trine::Statement->new( $objectbnode, $rdf_value, >+ $object ); >+ $rdf->add_statement($statement1); >+ $rdf->add_statement($statement2); >+ $rdf->add_statement($statement3); >+ last SWITCH; >+ } >+ if (/^DCMI Type Vocabulary/) { #Changing for DCMIType >+ my $objectbnode = RDF::Trine::Node::Blank->new('DCMIType'); >+ my $predicate = $map->dcterms($lowercase); >+ my $object = RDF::Trine::Node::Literal->new($element_content); >+ my $dcam_member_of = $map->dcam('memberOf'); >+ my $resource_schema = $map->dcterms('DCMIType'); >+ my $rdf_value = $map->rdf('value'); >+ my $statement1 = >+ RDF::Trine::Statement->new( $subject, $predicate, >+ $objectbnode ); >+ my $statement2 = >+ RDF::Trine::Statement->new( $objectbnode, $dcam_member_of, >+ $resource_schema ); >+ my $statement3 = >+ RDF::Trine::Statement->new( $objectbnode, $rdf_value, >+ $object ); >+ $rdf->add_statement($statement1); >+ $rdf->add_statement($statement2); >+ $rdf->add_statement($statement3); >+ last SWITCH; >+ } >+ if (/^ISO 639-2/) { #Changing bnodeId ISO639-2 for language >+ my $objectbnode = RDF::Trine::Node::Blank->new('language'); >+ my $predicate = $map->dcterms($lowercase); >+ my $object = RDF::Trine::Node::Literal->new($element_content); >+ my $dcam_member_of = $map->dcam('memberOf'); >+ my $resource_schema = $map->dcterms($deletespaces); >+ my $rdf_value = $map->rdf('value'); >+ my $statement1 = >+ RDF::Trine::Statement->new( $subject, $predicate, >+ $objectbnode ); >+ my $statement2 = >+ RDF::Trine::Statement->new( $objectbnode, $dcam_member_of, >+ $resource_schema ); >+ my $statement3 = >+ RDF::Trine::Statement->new( $objectbnode, $rdf_value, >+ $object ); >+ $rdf->add_statement($statement1); >+ $rdf->add_statement($statement2); >+ $rdf->add_statement($statement3); >+ last SWITCH; >+ } >+ if (/^RFC 1766/) { #Changing bnodeId RFC1766 for languagetag >+ my $objectbnode = RDF::Trine::Node::Blank->new('languagetag'); >+ my $predicate = $map->dcterms($lowercase); >+ my $object = RDF::Trine::Node::Literal->new($element_content); >+ my $dcam_member_of = $map->dcam('memberOf'); >+ my $resource_schema = $map->dcterms($deletespaces); >+ my $rdf_value = $map->rdf('value'); >+ my $statement1 = >+ RDF::Trine::Statement->new( $subject, $predicate, >+ $objectbnode ); >+ my $statement2 = >+ RDF::Trine::Statement->new( $objectbnode, $dcam_member_of, >+ $resource_schema ); >+ my $statement3 = >+ RDF::Trine::Statement->new( $objectbnode, $rdf_value, >+ $object ); >+ $rdf->add_statement($statement1); >+ $rdf->add_statement($statement2); >+ $rdf->add_statement($statement3); >+ last SWITCH; >+ } >+ if ( /^LCSH/ || /^MeSH/ || /^LCC/ || /^DDC/ || >+ /^UDC/ || /^IMT/ || /^URI/ || /^TGN/ ) >+ { #Scheme sharing common elements >+ my $objectbnode = RDF::Trine::Node::Blank->new($deletespaces); >+ my $predicate = $map->dcterms($lowercase); >+ my $object = RDF::Trine::Node::Literal->new($element_content); >+ my $dcam_member_of = $map->dcam('memberOf'); >+ my $resource_schema = $map->dcterms($deletespaces); >+ my $rdf_value = $map->rdf('value'); >+ my $statement1 = >+ RDF::Trine::Statement->new( $subject, $predicate, >+ $objectbnode ); >+ my $statement2 = >+ RDF::Trine::Statement->new( $objectbnode, $dcam_member_of, >+ $resource_schema ); >+ my $statement3 = >+ RDF::Trine::Statement->new( $objectbnode, $rdf_value, >+ $object ); >+ $rdf->add_statement($statement1); >+ $rdf->add_statement($statement2); >+ $rdf->add_statement($statement3); >+ last SWITCH; >+ } >+ } >+ } #if-elsif >+ return $rdf; >+} #subroutine >+ >+=item C<dc_order_execution> >+ >+USAGE: Get the parameters for xml or rdf and execute in sequence. >+ >+ my dc = $self->conversion_to_dc(); >+ $self->dc_order_execution ($dc, $dcxml, $root); >+ >+=back >+ >+=cut >+ >+sub dc_order_execution { >+ >+ my $self = shift; >+ >+ if ( $self->type() eq 'xml' ) { #Order for xml >+ my ( $dc, $dcxml, $root ) = @_; >+ foreach my $element ( $dc->elements() ) { >+ SWITCH: { >+ if ( $element->name() >+ and not defined $element->scheme() >+ and not defined $element->qualifier() ) >+ { >+ $dcxml = >+ xml_constructor( $dcxml, $root, "dc", 0, $element->name(), >+ $element->content() ); >+ last SWITCH; >+ } >+ >+ if ( $element->name() >+ and not defined $element->scheme() >+ and not defined $element->qualifier() ) >+ { >+ $dcxml = >+ xml_constructor( $dcxml, $root, "dcterms", 0, >+ $element->name(), $element->content() ); >+ last SWITCH; >+ } >+ >+ if ( $element->name() >+ and $element->scheme() >+ and $element->qualifier() ) >+ { >+ $dcxml = xml_constructor( >+ $dcxml, $root, >+ "dcterms", 1, >+ $element->name(), $element->content(), >+ $element->qualifier(), $element->scheme() >+ ); >+ last SWITCH; >+ } >+ >+ if ( $element->name() >+ and $element->scheme() >+ and ( $element->scheme ne "DCMI Type Vocabulary" ) ) >+ { >+ $dcxml = >+ xml_constructor( $dcxml, $root, "dc", 1, $element->name(), >+ $element->content(), $element->qualifier(), >+ $element->scheme() ); >+ last SWITCH; >+ } >+ >+ if ( $element->name() >+ and $element->scheme() >+ and ( $element->scheme() eq "DCMI Type Vocabulary" ) ) >+ { >+ $dcxml = >+ xml_constructor( $dcxml, $root, "dc", 1, $element->name(), >+ $element->content(), $element->qualifier(), >+ $element->scheme() ); >+ last SWITCH; >+ } >+ >+ if ( $element->name() and $element->qualifier() ) { >+ $dcxml = xml_constructor( >+ $dcxml, $root, >+ "dcterms", 0, >+ $element->name(), $element->content(), >+ $element->qualifier(), $element->scheme() >+ ); >+ last SWITCH; >+ } #if >+ } #SWITCH >+ } #foreach 1 >+ } >+ elsif ( $self->type() eq 'rdf' ) { #Order for rdf/xml >+ my ( $dc, $rdf, $subject ) = @_; >+ foreach my $element ( $dc->elements() ) { >+ SWITCH: { >+ if ( $element->name() >+ and not defined $element->scheme() >+ and not defined $element->qualifier() ) >+ { >+ rdf_constructor( $rdf, $subject, "dc", 0, $element->name(), >+ $element->content() ) >+ unless $self->qualified() == 1; >+ rdf_constructor( $rdf, $subject, "dc", 2, $element->name(), >+ $element->content() ) >+ unless $self->qualified() == 0; >+ last SWITCH; >+ } >+ >+ if ( $element->name() >+ and $element->scheme() >+ and ( $element->scheme ne "DCMI Type Vocabulary" ) ) >+ { >+ rdf_constructor( $rdf, $subject, "dc", 1, $element->name(), >+ $element->content(), $element->qualifier(), >+ $element->scheme() ); >+ last SWITCH; >+ } >+ >+ if ( $element->name() >+ and $element->scheme() >+ and ( $element->scheme() eq "DCMI Type Vocabulary" ) ) >+ { >+ rdf_constructor( $rdf, $subject, "dc", 1, $element->name(), >+ $element->content(), $element->qualifier(), >+ $element->scheme() ); >+ last SWITCH; >+ } >+ >+ if ( $element->name() and $element->qualifier() ) { >+ rdf_constructor( >+ $rdf, $subject, >+ "dcterms", 0, >+ $element->name(), $element->content(), >+ $element->qualifier(), $element->scheme() >+ ); >+ last SWITCH; >+ } #if >+ } #SWITCH >+ } #foreach 2 >+ } >+ return; >+} >+ >+END { >+ >+ #When opened with MARC::File::USMARC, close marc record if not closed >+ sub DESTROY { >+ my $self = shift; >+ if ( $self->{get_marc_record} =~ /^MARC:File::USMARC/ ) { >+ $self->{get_marc_record}->close(); >+ undef $self->{get_marc_record}; >+ } >+ } >+} >+1; >+__END__ >+ >+=head1 VERSION >+ >+version 0.01 >+ >+=head1 RELATES MODULES >+ >+This package requires the following modules: >+ >+L<DublinCore::Record> >+ >+L<MARC::Record> >+ >+L<MARC::File::USMARC> >+ >+L<MARC::Crosswalk::DublinCore> >+ >+L<XML::LibXML> >+ >+L<RDF::Trine> >+ >+L<C4::Record> >+ >+=head1 SEE ALSO >+ >+Dublin Core Web Page L<http://dublincore.org>. >+ >+=head1 LICENSE >+ >+Copyright (c) 2014 Koha Community. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. >+ >+=head1 AUTHOR >+ >+Hector Eduardo Catro Avalos E<lt> hector.hecaxmmx at gmail dot com E<gt> >+and the Koha Development Team. >+ >+=cut >diff --git a/catalogue/export.pl b/catalogue/export.pl >index e66d3f2..c4e0617 100755 >--- a/catalogue/export.pl >+++ b/catalogue/export.pl >@@ -26,6 +26,14 @@ my $format=$query->param("format"); > my $error = ''; > if ($op eq "export") { > my $biblionumber = $query->param("bib"); >+ my $recommendation = $query->param("recommendation"); >+ my $formats = $query->param("formats"); >+ my $qualifier = $query->param("qualifier"); >+ my $root_element = $query->param("root_element"); >+ my $xsischemalocation = $query->param("xsischemalocation"); >+ my $resource_url = $query->url(-base => 1) . >+ '/cgi-bin/koha/catalogue/detail.pl?biblionumber=' . >+ $biblionumber; > if ($biblionumber){ > > my $marc = GetMarcBiblio($biblionumber, 1); >@@ -51,8 +59,32 @@ if ($op eq "export") { > $format = "bibtex"; > } > elsif ($format =~ /dc/) { >- ($error,$marc) = marc2dcxml($marc,1); >- $format = "dublin-core.xml"; >+ SWITCH: >+ for ($recommendation) { >+ if (/^simple-dc-rdf/) { >+ ($error,$marc) = marc2dcxml($marc, $recommendation, 0, >+ 1, undef, undef, $resource_url , $formats); >+ $format = "dublin-core." . $formats; >+ last SWITCH; } >+ if (/^dc-rdf/) { >+ ($error,$marc) = marc2dcxml($marc, $recommendation, 1, >+ 1, undef, undef, $resource_url, $formats); >+ $format = "dublin-core." . $formats; >+ last SWITCH; } >+ if (/^dc-xml/) { >+ ($error,$marc) = marc2dcxml($marc, $recommendation, $qualifier, >+ 1, $root_element, $xsischemalocation, undef, undef); >+ $format = "dublin-core.xml"; >+ last SWITCH; } >+ if (/^oai-dc/) { >+ ($error,$marc) = marc2dcxml($marc, $recommendation); >+ $format = "dublin-core.xml"; >+ last SWITCH; } >+ if (/^srw_dc/) { >+ ($error,$marc) = marc2dcxml($marc, $recommendation); >+ $format = "dublin-core.xml"; >+ last SWITCH; } >+ } > } > elsif ($format =~ /marc8/) { > $marc = changeEncoding($marc,"MARC","MARC21","MARC-8"); >diff --git a/debian/control b/debian/control >index fea40e8..1f4e5a0 100644 >--- a/debian/control >+++ b/debian/control >@@ -86,11 +86,11 @@ Build-Depends: libalgorithm-checkdigits-perl, > libopenoffice-oodoc-perl, > libpdf-api2-perl, > libpdf-api2-simple-perl, >- libpdf-fromhtml-perl, > libpdf-reuse-barcode-perl, > libpdf-reuse-perl, > libpdf-table-perl, > libplack-middleware-reverseproxy-perl, >+ librdf-trine-perl, > libscalar-list-utils-perl, > libschedule-at-perl, > libsms-send-perl, >@@ -99,7 +99,6 @@ Build-Depends: libalgorithm-checkdigits-perl, > libtemplate-perl, > libtemplate-plugin-htmltotext-perl, > libtemplate-plugin-json-escape-perl, >- libtemplate-plugin-stash-perl, > libtest-cgi-multipart-perl, > libtest-deep-perl, > libtest-harness-perl | perl-modules, >@@ -131,7 +130,7 @@ Build-Depends: libalgorithm-checkdigits-perl, > libyaml-perl, > libyaml-syck-perl, > perl, >- perl-modules, >+ perl-modules, > debhelper (>= 7.0.50), gettext, xsltproc, docbook-xsl, > libxml2-utils, bash-completion, perl-modules (>= 5.14.2) | libtest-simple-perl (>= 0.98) > >@@ -291,11 +290,11 @@ Depends: libalgorithm-checkdigits-perl, > libopenoffice-oodoc-perl, > libpdf-api2-perl, > libpdf-api2-simple-perl, >- libpdf-fromhtml-perl, > libpdf-reuse-barcode-perl, > libpdf-reuse-perl, > libpdf-table-perl, > libplack-middleware-reverseproxy-perl, >+ librdf-trine-perl, > libscalar-list-utils-perl, > libschedule-at-perl, > libsms-send-perl, >@@ -304,7 +303,6 @@ Depends: libalgorithm-checkdigits-perl, > libtemplate-perl, > libtemplate-plugin-htmltotext-perl, > libtemplate-plugin-json-escape-perl, >- libtemplate-plugin-stash-perl, > libtest-cgi-multipart-perl, > libtest-deep-perl, > libtest-harness-perl | perl-modules, >diff --git a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css >index 23066ea..9516c16 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css >+++ b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css >@@ -2798,3 +2798,13 @@ div#cn_browser_table_wrapper > table#cn_browser_table { > margin: auto; > width:90%; > } >+ >+/* CSS for Dublin Core Modal */ >+ >+#dc-rdf, #dc-xml { >+ display: none; >+} >+ >+.label_dc { >+ cursor: pointer; >+} >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc >index ee39f31..d5b454d 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc >@@ -221,7 +221,7 @@ CAN_user_serials_create_subscription ) %] > <button class="btn btn-small dropdown-toggle" data-toggle="dropdown"><i class="icon-download-alt"></i> Save <span class="caret"></span></button> > <ul class="dropdown-menu"> > <li><a href="/cgi-bin/koha/catalogue/export.pl?format=bibtex&op=export&bib=[% biblionumber %]">BIBTEX</a></li> >- <li><a href="/cgi-bin/koha/catalogue/export.pl?format=dc&op=export&bib=[% biblionumber %]">Dublin Core (XML)</a></li> >+ <li><a href="#" data-toggle="modal" data-target="#exportModal_">Dublin Core</a></li> > <li><a href="/cgi-bin/koha/catalogue/export.pl?format=marcxml&op=export&bib=[% biblionumber %]">MARCXML</a></li> > <li><a href="/cgi-bin/koha/catalogue/export.pl?format=marc8&op=export&bib=[% biblionumber %]">MARC (non-Unicode/MARC-8)</a></li> > <li><a href="/cgi-bin/koha/catalogue/export.pl?format=utf8&op=export&bib=[% biblionumber %]">MARC (Unicode/UTF-8)</a></li> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt >index 41730f5..dd1aa55 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt >@@ -303,6 +303,83 @@ function verify_images() { > > [% END %] > }); >+ >+ //JQuery for Dublin Core Modal >+ $(document).ready(function(){ >+ $("#input-simple").click(function(){ >+ $(".rdfoptions").removeAttr("disabled"); >+ $(".xmloptions").attr("disabled","disabled"); >+ $("#dc-rdf").toggle(true); >+ $("#dc-xml").hide(); >+ }); >+ }); >+ >+ $(document).ready(function(){ >+ $("#input-rdf").click(function(){ >+ $(".rdfoptions").removeAttr("disabled"); >+ $(".xmloptions").attr("disabled","disabled"); >+ $("#dc-rdf").toggle(true); >+ $("#dc-xml").hide(); >+ }); >+ }); >+ >+ $(document).ready(function(){ >+ $("#input-xml").click(function(){ >+ $(".xmloptions").removeAttr("disabled"); >+ $(".rdfoptions").attr("disabled","disabled"); >+ if($("#root_checked").is(':checked')){ >+ $("#root_value").removeAttr("disabled"); >+ } else { >+ $("#root_value").attr("disabled","disabled"); >+ } >+ if($("#schema_checked").is(':checked')){ >+ $("#schema_value").removeAttr("disabled"); >+ } else { >+ $("#schema_value").attr("disabled","disabled"); >+ } >+ $("#dc-xml").toggle(); >+ $("#dc-rdf").hide(); >+ }); >+ }); >+ >+ $(document).ready(function(){ >+ $("#root_checked").click(function(){ >+ if($("#root_checked").is(':checked')){ >+ $("#root_value").removeAttr("disabled"); >+ } else { >+ $("#root_value").attr("disabled","disabled"); >+ } >+ }); >+ }); >+ >+ $(document).ready(function(){ >+ $("#schema_checked").click(function(){ >+ if($("#schema_checked").is(':checked')){ >+ $("#schema_value").removeAttr("disabled"); >+ } else { >+ $("#schema_value").attr("disabled","disabled"); >+ } >+ }); >+ }); >+ >+ $(document).ready(function(){ >+ $("#input-oai").click(function(){ >+ $(".rdfoptions").attr("disabled","disabled"); >+ $(".xmloptions").attr("disabled","disabled"); >+ $("#dc-rdf").hide(); >+ $("#dc-xml").hide(); >+ }); >+ }); >+ >+ $(document).ready(function(){ >+ $("#input-srw").click(function(){ >+ $(".rdfoptions").attr("disabled","disabled"); >+ $(".xmloptions").attr("disabled","disabled"); >+ $("#dc-rdf").hide(); >+ $("#dc-xml").hide(); >+ }); >+ }); >+ > //]]> > </script> > </head> >@@ -1049,7 +1126,7 @@ function verify_images() { > <th>Save Record</th> </tr> > <tr><td> Select download format: <select name="format"> > <option value="mods">MODS (XML)</option> >- <option value="dc">Dublin Core (XML)</option> >+ <option data-toggle="modal" data-target="#exportModal_">Dublin Core</option> > <option value="marcxml">MARCXML</option> > <option value="marc8">MARC (non-Unicode/MARC-8)</option> > <option value="utf8">MARC (Unicode/UTF-8)</option> </select> >@@ -1082,4 +1159,84 @@ function verify_images() { > </div> > [% END %] > </div> >+ >+ <!--Modal for Dublin Core--> >+ <div class="modal hide" id="exportModal_" tabindex="-1" role="dialog" aria-labelledby="exportLabelexportModal_" aria-hidden="true"> >+ <div class="modal-header"> >+ <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">×</button> >+ <h3 id="exportLabelexportModal_">Exporting to Dublin Core...</h3> >+ </div> >+ <!-- Form to recollect data for Dublin Core--> >+ <form method="get" action="/cgi-bin/koha/catalogue/export.pl"> >+ <div class="modal-body"> >+ <fieldset> >+ <input id="input-simple" type="radio" name="recommendation" value="simple-dc-rdf"> >+ <label class="label_dc" for="input-simple">Simple DC-RDF</label> >+ <br> >+ <input id="input-rdf" type="radio" name="recommendation" value="dc-rdf" checked> >+ <label class="label_dc" for="input-rdf">DC-RDF (Recommended)</label> >+ <div id="dc-rdf"> >+ <br><b>Output options for RDF</b> >+ <br>DC-RDF is downloadable in "rdfxml" by default (this is according with the >+ <br>recommendation), but you can download the file in other formats: >+ <br> >+ <input id="rdfxml" class="rdfoptions" type="radio" name="formats" value="rdfxml" checked> >+ <label class="label_dc" for="rdfxml">rdfxml</label> >+ <input id="rdfjson" class="rdfoptions" type="radio" name="formats" value="rdfjson"> >+ <label class="label_dc" for="rdfjson">rdfjson</label> >+ <input id="ntriples" class="rdfoptions" type="radio" name="formats" value="ntriples"> >+ <label class="label_dc" for="ntriples">ntriples</label> >+ <input id="nquads" class="rdfoptions" type="radio" name="formats" value="nquads"> >+ <label class="label_dc" for="nquads">nquads</label> >+ <input id="ntriples_canonical" class="rdfoptions" type="radio" name="formats" value="ntriples-canonical"> >+ <label class="label_dc" for="ntriples_canonical">ntriples-canonical</label> >+ <input id="turtle" class="rdfoptions" type="radio" name="formats" value="turtle"> >+ <label class="label_dc" for="turtle">turtle</label> >+ </div> >+ <br> >+ <input id="input-xml" type="radio" name="recommendation" value="dc-xml"> >+ <label class="label_dc" for="input-xml">DC-XML</label> >+ <div id="dc-xml"> >+ <p><b>Output options for DC-XML</b> >+ <br> >+ <b>Dublin Core level</b></p> >+ <p><input id="simple_dc" class="xmloptions" type="radio" name="qualifier" value="0" checked disabled> >+ <label class="label_dc" for="simple_dc">Simple Dublin Core</label> >+ <input id="qualified_dc" class="xmloptions" type="radio" name="qualifier" value="1" disabled> >+ <label class="label_dc" for="qualified_dc">Qualified Dublin Core</label></p> >+ <b>Other data (Optional)</b> >+ <br> >+ <input id="root_checked" class="xmloptions" type="checkbox" value="root"> >+ <label class="label_dc" for="root_checked">Root element: </label> >+ <input id="root_value" class="xmloptions" type="text" name="root_element" value="metadata" disabled> >+ <br>The xsischemaLocation should be filled like: >+ <br>http://example.org/myapp/ http://example.org/myapp/schema.xsd >+ <br> >+ <input id="schema_checked" class="xmloptions" type="checkbox" value="schema" disabled> >+ <label class="label_dc" for="schema_checked">xsischemaLocation: </label> >+ <input id="schema_value" class="xmloptions" type="url" name="xsischemalocation" disabled><br> >+ </div> >+ <br> >+ <input id="input-oai" type="radio" name="recommendation" value="oai-dc"> >+ <label class="label_dc" for="input-oai">OAI-DC</label> >+ <br> >+ <input id="input-srw" type="radio" name="recommendation" value="srw_dc"> >+ <label class="label_dc" for="input-srw">SRW-DC</label> >+ <br> >+ <div> >+ <br>Learn more about DCMI Specifications at: <a href="http://dublincore.org/specifications/">http://dublincore.org/specifications/</a> >+ <br> >+ </div> >+ </fieldset> >+ </div> >+ <div class="modal-footer"> >+ <button type="submit" class="btn">Export</button> >+ <button class="btn btn-link" data-dismiss="modal" aria-hidden="true">Cancel</button> >+ </div> >+ <input type="hidden" name="op" value="export" /> >+ <input type="hidden" name="format" value="dc" /> >+ <input type="hidden" name="bib" value="[% biblionumber %]" /> >+ </form> >+ </div> >+ > [% INCLUDE 'intranet-bottom.inc' %] >diff --git a/koha-tmpl/opac-tmpl/bootstrap/css/opac.css b/koha-tmpl/opac-tmpl/bootstrap/css/opac.css >index 233e648..c750b04 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/css/opac.css >+++ b/koha-tmpl/opac-tmpl/bootstrap/css/opac.css >@@ -1 +1 @@ >-.shadowed{-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);box-shadow:0 1px 1px 0 rgba(0,0,0,0.2)}body{background-color:#eaeae6}html,body{height:100%}.no-js .dateformat{display:inline;white-space:nowrap}.no-js .modal-body{padding:0}.no-js .selections-toolbar{display:none}.js .dateformat{display:none}#wrap{min-height:100%;height:auto !important;height:100%}.popup{padding-left:0;padding-right:0}a{color:#0076b2}a.cancel{padding-left:1em}a:visited{color:#0076b2}a.title{font-weight:bold;font-size:108%}a.btn:visited{color:#333}a.btn-primary:visited{color:#fff}.ui-widget-content a,.ui-widget-content a:visited{color:#0076b2}h1{font-size:140%;line-height:150%}h1#libraryname{background:transparent url(../images/logo-koha.png) no-repeat scroll 0;border:0;float:left !important;margin:0;padding:0;width:120px}h1#libraryname a{border:0;cursor:pointer;display:block;height:0 !important;margin:0;overflow:hidden;padding:40px 0 0;text-decoration:none;width:120px}h2{font-size:130%;line-height:150%}h3{font-size:120%;line-height:150%}h4{font-size:110%}h5{font-size:100%}caption{font-size:120%;font-weight:bold;margin:0;text-align:left}input,textarea{width:auto}.input-fluid{width:50%}legend{font-size:110%;font-weight:bold}table,td{background-color:#fff}td .btn{white-space:nowrap}td .btn-link{padding:0}#advsearches label,#booleansearch label{display:inline}#basketcount{display:inline;margin:0;padding:0}#basketcount span{background-color:#ffc;color:#000;display:inline;font-size:80%;font-weight:normal;margin:0 0 0 .9em;padding:0 .3em 0 .3em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#members{display:block}#members p{color:#eee}#members a{color:#a6d8ed;font-weight:bold}#members a.logout{color:#e8583c;padding:0 .3em 0 .3em}#koha_url p{color:#666;float:right;margin:0}#moresearches{margin:.5em 0;padding:0 .8em}#moresearches li{display:inline;white-space:nowrap}#moresearches li:after{content:" | "}#moresearches ul{margin:0}#moresearches li:last-child:after{content:""}#news{margin:.5em 0}.newscontainer{border:1px solid #ddd;border-bottom-width:0;border-top-left-radius:5px;border-top-right-radius:5px}.newsheader{background-color:#ecede6;border-bottom:1px solid #ddd;margin:0;padding:8px}.newsbody{padding:8px}.newsfooter{border-bottom:1px solid #ddd;font-style:italic;padding:4px 8px}#opacheader{background-color:#ddd}#selections,.selections{font-weight:bold}.actions a{white-space:nowrap}.actions a.hold{background-image:url("../images/sprite.png");background-position:-5px -542px;background-repeat:no-repeat;margin-right:1em;padding-left:21px;text-decoration:none}.actions a.addtocart{background-image:url("../images/sprite.png");background-position:-5px -572px;background-repeat:no-repeat;margin-right:1em;padding-left:20px;text-decoration:none}.actions a.addtoshelf{background-image:url("../images/sprite.png");background-position:-5px -27px;background-repeat:no-repeat;margin-right:1em;padding-left:20px;text-decoration:none}.actions a.addtolist{background-position:-5px -27px;margin-right:1em;padding-left:20px;text-decoration:none}.actions a.tag_add{background-position:-5px -1110px;margin-right:1em;padding-left:20px;text-decoration:none}.actions a.removefromlist{background-position:-8px -690px;margin-right:1em;text-decoration:none;padding-left:15px}.alert{background:#fffbe5;background:-moz-linear-gradient(top, #fffbe5 0, #fff0b2 9%, #fff1a8 89%, #f7e665 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fffbe5), color-stop(9%, #fff0b2), color-stop(89%, #fff1a8), color-stop(100%, #f7e665));background:-webkit-linear-gradient(top, #fffbe5 0, #fff0b2 9%, #fff1a8 89%, #f7e665 100%);background:-o-linear-gradient(top, #fffbe5 0, #fff0b2 9%, #fff1a8 89%, #f7e665 100%);background:-ms-linear-gradient(top, #fffbe5 0, #fff0b2 9%, #fff1a8 89%, #f7e665 100%);background:linear-gradient(to bottom, #fffbe5 0, #fff0b2 9%, #fff1a8 89%, #f7e665 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbe5', endColorstr='#f7e665', GradientType=0);border-color:#d6c43b;color:#333}.alert-info{background:#f4f6fa;background:-moz-linear-gradient(top, #f4f6fa 0, #eaeef5 4%, #e8edf6 96%, #cddbf2 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f4f6fa), color-stop(4%, #eaeef5), color-stop(96%, #e8edf6), color-stop(100%, #cddbf2));background:-webkit-linear-gradient(top, #f4f6fa 0, #eaeef5 4%, #e8edf6 96%, #cddbf2 100%);background:-o-linear-gradient(top, #f4f6fa 0, #eaeef5 4%, #e8edf6 96%, #cddbf2 100%);background:-ms-linear-gradient(top, #f4f6fa 0, #eaeef5 4%, #e8edf6 96%, #cddbf2 100%);background:linear-gradient(to bottom, #f4f6fa 0, #eaeef5 4%, #e8edf6 96%, #cddbf2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f4f6fa', endColorstr='#cddbf2', GradientType=0);border-color:#c5d1e5;color:#333}.alert-success{background:#f8ffe8;background:-moz-linear-gradient(top, #f8ffe8 0, #e3f5ab 4%, #dcf48d 98%, #9ebf28 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f8ffe8), color-stop(4%, #e3f5ab), color-stop(98%, #dcf48d), color-stop(100%, #9ebf28));background:-webkit-linear-gradient(top, #f8ffe8 0, #e3f5ab 4%, #dcf48d 98%, #9ebf28 100%);background:-o-linear-gradient(top, #f8ffe8 0, #e3f5ab 4%, #dcf48d 98%, #9ebf28 100%);background:-ms-linear-gradient(top, #f8ffe8 0, #e3f5ab 4%, #dcf48d 98%, #9ebf28 100%);background:linear-gradient(to bottom, #f8ffe8 0, #e3f5ab 4%, #dcf48d 98%, #9ebf28 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8ffe8', endColorstr='#9ebf28', GradientType=0);border-color:#9fba35;color:#333}.breadcrumb{background-color:#f2f2ef;font-size:85%;list-style:none outside none;margin:10px 20px;padding:5px 10px;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.form-inline{display:inline;padding:0;margin:0}.form-inline fieldset{margin:.3em 0;padding:.3em}.main{background-color:#fff;border:1px solid #d2d2cf;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);margin-top:.5em;margin-bottom:.5em}.mastheadsearch{-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px;padding:.8em;margin:.5em 0;background:#c7c7c1;background:-moz-linear-gradient(top, #c7c7c1 38%, #a7a7a2 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(38%, #c7c7c1), color-stop(100%, #a7a7a2));background:-webkit-linear-gradient(top, #c7c7c1 38%, #a7a7a2 100%);background:-o-linear-gradient(top, #c7c7c1 38%, #a7a7a2 100%);background:-ms-linear-gradient(top, #c7c7c1 38%, #a7a7a2 100%);background:linear-gradient(to bottom, #c7c7c1 38%, #a7a7a2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#c7c7c1', endColorstr='#a7a7a2', GradientType=0)}.mastheadsearch label{font-size:115%;font-weight:bold}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#9fe1ff;font-weight:bold}.navbar-fixed-bottom.navbar-static-bottom{margin-top:.5em;position:static}#changelanguage .nav>.active>p{padding:0 15px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f4f4f4}.ui-tabs-nav .ui-tabs-active a,.ui-tabs-nav a:hover,.ui-tabs-nav a:focus,.ui-tabs-nav a:active,.ui-tabs-nav span.a{background:none repeat scroll 0 0 transparent;outline:0 none}.ui-widget,.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:inherit;font-size:inherit}ul.ui-tabs-nav li{list-style:none}.ui-tabs.ui-widget-content{background:transparent none;border:0}.ui-tabs .ui-tabs-panel{border:1px solid #d8d8d8;margin-bottom:1em}.ui-tabs-nav.ui-widget-header{border:0;background:none}.ui-tabs .ui-tabs-nav li{background:#f3f3f3 none;border-color:#d8d8d8;margin-right:.4em}.ui-tabs .ui-tabs-nav li.ui-tabs-active{background-color:#fff;border:1px solid #d8d8d8;border-bottom:0}.ui-tabs .ui-tabs-nav li.ui-tabs-active a{color:#000;font-weight:bold}.ui-tabs .ui-tabs-nav li.ui-state-default.ui-state-hover{background:#f3f3f3 none}.ui-tabs .ui-tabs-nav li.ui-tabs-active.ui-state-hover{background:#fff none}.ui-tabs .ui-state-default a,.ui-tabs .ui-state-default a:link,.ui-tabs .ui-state-default a:visited{color:#069}.ui-tabs .ui-state-hover a,.ui-tabs .ui-state-hover a:link,.ui-tabs .ui-state-hover a:visited{color:#903}.statictabs ul{background:none repeat scroll 0 0 transparent;border:0 none;margin:0;padding:.2em .2em 0;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:4px;border-top-left-radius:4px;color:#222;font-weight:bold;font-size:100%;line-height:1.3;list-style:none outside none;outline:0 none;text-decoration:none}.statictabs ul:before{content:"";display:table}.statictabs ul:after{clear:both;content:"";display:table}.statictabs li{background:none repeat scroll 0 0 #e6f0f2;border:1px solid #b9d8d9;border-bottom:0 none !important;border-top-right-radius:4px;border-top-left-radius:4px;float:left;list-style:none outside none;margin-bottom:0;margin-right:.4em;padding:0;position:relative;white-space:nowrap;top:1px;color:#555;font-weight:normal}.statictabs li.active{background-color:#fff;color:#212121;font-weight:normal;padding-bottom:1px}.statictabs li a{color:#004d99;cursor:pointer;float:left;padding:.5em 1em;text-decoration:none}.statictabs li a:hover{background-color:#edf4f5;border-top-right-radius:4px;border-top-left-radius:4px;color:#538200}.statictabs li.active a{color:#000;font-weight:bold;cursor:text;background:none repeat scroll 0 0 transparent;outline:0 none}.statictabs .tabs-container{border:1px solid #b9d8d9;background:none repeat scroll 0 0 transparent;display:block;padding:1em 1.4em;border-bottom-right-radius:4px;border-bottom-left-radius:4px;color:#222}.ui-datepicker table{width:100%;font-size:.9em;border:0;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{background:transparent none;padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker-trigger{vertical-align:middle;margin:0 3px}.ui-datepicker{-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);box-shadow:0 1px 1px 0 rgba(0,0,0,0.2)}.ui-widget-content{border:1px solid #aaa;background:#fff none;color:#222}.ui-widget-header{border:1px solid #aaa;background:#e6f0f2 none;color:#222;font-weight:bold}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #aaa;background:#f4f8f9 none;font-weight:normal;color:#555}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #aaa;background:#e6f0f2 none;font-weight:normal;color:#212121}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff none;font-weight:normal;color:#212121}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee;color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec;color:#cd0a0a}.ui-autocomplete{position:absolute;cursor:default;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);box-shadow:0 1px 1px 0 rgba(0,0,0,0.2)}.ui-autocomplete.ui-widget-content .ui-state-hover{border:1px solid #aaa;background:#e6f0f2 none;font-weight:normal;color:#212121}.ui-autocomplete-loading{background:#fff url("../../img/loading-small.gif") right center no-repeat}.ui-menu li{list-style:none}th{background-color:#ecede6}.item-thumbnail{max-width:none}.no-image{background-color:#fff;border:1px solid #aaa;color:#979797;display:block;font-size:86%;font-weight:bold;text-align:center;width:75px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#bookcover .no-image{margin-right:10px;margin-bottom:10px}td.overdue{color:#c33}table{font-size:90%}th.sum{text-align:right}td.sum{background-color:#ffc;font-weight:bold}th[scope=row]{background-color:transparent;text-align:right}.required{color:#c00}.label{background-color:transparent;color:inherit;display:inline;font-weight:normal;padding:0;text-shadow:none}.blabel{background-color:#999;border-radius:3px;color:#fff;display:inline-block;font-weight:bold;padding:2px 4px;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.label-important{background-color:#b94a48}.label-warning{background-color:#f89406}.label-success{background-color:#468847}.label-info{background-color:#3a87ad}.label-inverse{background-color:#333}fieldset.rows{float:left;font-size:90%;clear:left;margin:.9em 0 0 0;padding:0;width:100%}fieldset.rows legend{font-weight:bold;font-size:130%}fieldset.rows label,fieldset.rows .label{float:left;font-weight:bold;width:9em;margin-right:1em;text-align:right}fieldset.rows label.lradio{float:none;margin:inherit;width:auto}fieldset.rows fieldset{margin:0;padding:.3em}fieldset.rows ol{padding:1em 1em 0 1em;list-style-type:none}fieldset.rows ol.lradio label{width:auto;float:none;margin-right:0}fieldset.rows ol.lradio label.lradio{float:left;width:12em;margin-right:1em}fieldset.rows li{float:left;clear:left;padding-bottom:1em;list-style-type:none;width:100%}fieldset.rows li.lradio{padding-left:8.5em;width:auto}fieldset.rows li.lradio label{float:none;width:auto;margin:0 0 0 1em}fieldset.rows .hint{display:block;margin-left:11em}fieldset.action{clear:both;float:none;border:none;margin:0;padding:1em 0 .3em 0;width:auto}fieldset.action p{margin-bottom:1em}fieldset table{font-size:100%}div.rows+div.rows{margin-top:.6em}div.rows{float:left;clear:left;margin:0 0 0 0;padding:0;width:100%}div.rows span.label{float:left;font-weight:bold;width:9em;margin-right:1em;text-align:left}div.rows ol{list-style-type:none;margin-left:0;padding:.5em 1em 0 0}div.rows li{border-bottom:1px solid #eee;float:left;clear:left;padding-bottom:.2em;padding-top:.1em;list-style-type:none;width:100%}div.rows ul li{margin-left:7.3em}div.rows ul li:first-child{float:none;clear:none;margin-left:0}div.rows ol li li{border-bottom:0}.tagweight0{font-size:12px}.tagweight1{font-size:14px}.tagweight2{font-size:16px}.tagweight3{font-size:18px}.tagweight4{font-size:20px}.tagweight5{font-size:22px}.tagweight6{font-size:24px}.tagweight7{font-size:26px}.tagweight8{font-size:28px}.tagweight9{font-size:30px}.toolbar{background-color:#eee;border:1px solid #e8e8e8;font-size:85%;padding:3px 3px 5px 5px;vertical-align:middle}.toolbar a{white-space:nowrap}.toolbar label{display:inline;font-size:100%;font-weight:bold;margin-left:.5em}.toolbar select{font-size:97%;height:auto;line-height:inherit;padding:0;margin:0;width:auto;white-space:nowrap}.toolbar .hold,.toolbar #tagsel_tag{padding-left:28px;font-size:97%;font-weight:bold}.toolbar #tagsel_form{margin-top:.5em}.toolbar li{display:inline;list-style:none}.toolbar li a{border-left:1px solid #e8e8e8}.toolbar li:first-child a{border-left:0}.toolbar ul{padding-left:0}#basket .toolbar{padding:7px 5px 9px 9px}#selections-toolbar,.selections-toolbar{background:-moz-linear-gradient(top, #b2b2b2 0, #e0e0e0 14%, #e8e8e8 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0, #b2b2b2), color-stop(14%, #e0e0e0), color-stop(100%, #e8e8e8));background:-webkit-linear-gradient(top, #b2b2b2 0, #e0e0e0 14%, #e8e8e8 100%);background:-o-linear-gradient(top, #b2b2b2 0, #e0e0e0 14%, #e8e8e8 100%);background:-ms-linear-gradient(top, #b2b2b2 0, #e0e0e0 14%, #e8e8e8 100%);background:linear-gradient(top, #b2b2b2 0, #e0e0e0 14%, #e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e0e0e0', endColorstr='#e8e8e8', GradientType=0);margin:0 0 1em 0;padding-top:.5em;padding-left:10px}.list-actions{display:inline}#tagsel_span input.submit,#tagsel_tag{border:0;background-color:transparent;font-size:100%;color:#0076b2;cursor:pointer;background-image:url("../images/sprite.png");background-position:1px -643px;background-repeat:no-repeat;padding-left:25px;text-decoration:none}#tagsel_tag.disabled{background-position:-1px -667px}#tagsel_span input:hover,#selections-toolbar input.hold:hover{color:#005580;text-decoration:underline}#tagsel_span input.disabled,#tagsel_span input.disabled:hover,#tagsel_span input.hold.disabled,#tagsel_span input.hold.disabled:hover,#selections-toolbar input.hold.disabled,#selections-toolbar input.hold.disabled:hover,#selections-toolbar a.disabled,#selections-toolbar a.disabled:hover,.selections-toolbar a.disabled,.selections-toolbar a.disabled:hover{color:#888;text-decoration:none;padding-left:23px}.results_summary{display:block;font-size:85%;color:#707070;padding:0 0 .5em 0}.results_summary .results_summary{font-size:100%}.results_summary.actions{margin-top:.5em}.results_summary.tagstatus{display:inline}.results_summary .label{color:#202020}.results_summary a{font-weight:normal}#views{border-bottom:1px solid #d6d6d6;margin-bottom:.5em;padding:0 2em .2em .2em;white-space:nowrap}.view{padding:.2em .2em 2px .2em}#bibliodescriptions,#isbdcontents{clear:left;margin-top:.5em}.view a,.view span{background-image:url("../images/sprite.png");background-repeat:no-repeat;font-size:87%;font-weight:normal;padding:.4em .7em 5px 26px;text-decoration:none}span#MARCview,span#ISBDview,span#Normalview,span#Fullhistory,span#Briefhistory{font-weight:bold}a#MARCview,span#MARCview{background-position:-3px -23px}a#MARCviewPop,span#MARCviewPop{background-position:-3px -23px}a#ISBDview,span#ISBDview{background-position:-3px -52px}a#Normalview,span#Normalview{background-position:-1px 6px}.view a{background-color:#f3f3f3;border-left:1px solid #c9c9c9}#bookcover{float:left;margin:0;padding:0}#bookcover .no-image{margin-right:10px;margin-bottom:10px}#bookcover img{margin:0 1em 1em 0}.results-pagination{position:absolute;top:32px;left:-1px;width:100%;height:auto;border:1px solid #d0d0d0;display:none;background-color:#f3f3f3;padding-bottom:10px;z-index:100}.back{float:right}.back input{background:none !important;color:#999 !important}.pagination_list ul{padding-top:40px;padding-left:0}.pagination_list li{list-style:none;float:bottom;padding:4px;color:#999}.pagination_list li.highlight{background-color:#f3f3f3;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.pagination_list li a{padding-left:0}.pagination_list .li_pag_index{color:#999;float:left;font-size:15px;font-weight:bold;padding-right:10px;text-align:right;width:13px}.nav_results{background-color:#f3f3f3;border:1px solid #d0d0d0;font-size:95%;font-weight:bold;margin-top:.5em;position:relative}.nav_results .l_Results a{background:#e1e1e1 url("../images/sprite.png") no-repeat 0 -504px;color:#069;display:block;padding:8px 28px;text-decoration:none}.nav_results .l_Results:hover{background-color:#d9d9d9}.pg_menu{margin:0;border-top:1px solid #d0d0d0;white-space:nowrap}.pg_menu li{color:#b2b2b2;display:inline;list-style:none;margin:0}.pg_menu li.back_results a{border-left:1px solid #d0d0d0;border-right:1px solid #d0d0d0}.pg_menu li a,.pg_menu li span{background-color:#f3f3f3;display:block;float:left;padding:.4em .5em;text-decoration:none;font-weight:normal;text-align:center}.pg_menu li span{color:#b2b2b2}#listResults li{background-color:#999;color:#c5c5c5;font-weight:normal;display:block;margin-right:1px;font-size:80%;padding:0;text-align:center;min-width:18px}#listResults li:hover{background-color:#069}#listResults li a{color:#fff;font-weight:normal}.nav_pages .close_pagination{padding-right:10px;position:absolute;right:3px;top:-25px}.nav_pages .close_pagination a{text-decoration:none !important}.nav_pages ul{padding-top:10px}.nav_pages li{list-style:none;float:left;padding:4px;color:#999}.nav_pages li a{text-decoration:none !important}.nav_pages li a:hover{text-decoration:underline}.nav_pages li ul{float:left}#action{margin:.5em 0 0 0;background-color:#f3f3f3;border:1px solid #e8e8e8;padding-bottom:3px}#action li{list-style:none;margin:.2em;padding:.3em 0}#action a{font-weight:bold;text-decoration:none}#export li,#moresearches_menu li{padding:0;margin:0}#export li a,#moresearches_menu li a{font-weight:normal}#export li a.menu-inactive,#moresearches_menu li a.menu-inactive{font-weight:bold}#format,#furthersearches{padding-left:35px}.highlight_controls{float:left}a.addtocart,a.addtoshelf,a.brief,a.deleteshelf,a.deleteshelf.disabled,a.detail,a.download,a.editshelf,a.empty,a.hide,a.highlight_toggle,a.hold,a.hold.disabled,a.incart,a.new,a.print-small,a.print-large,a.removeitems,a.removeitems.disabled,a.reserve,a.send,a.tag_add,a.removefromlist,input.hold,input.hold.disabled,input.editshelf,.newshelf,.newshelf.disabled,.deleteshelf{background-image:url("../images/sprite.png");background-repeat:no-repeat}a.addtocart{background-position:-5px -265px;padding-left:35px}a.addtoshelf{background-position:-5px -225px;padding-left:35px}a.brief{background-position:-2px -868px;text-decoration:none;padding-left:27px}a.cartRemove{color:#c33;font-size:90%;margin:0;padding:0}a.detail{background-position:-2px -898px;text-decoration:none;padding-left:27px}a.download{background-position:-5px -348px;padding-left:20px;text-decoration:none}a.editshelf{background-position:2px -348px;padding-left:26px;text-decoration:none}a.empty{background-position:2px -598px;text-decoration:none;padding-left:30px}a.hide{background-position:-3px -814px;text-decoration:none;padding-left:26px}a.highlight_toggle{background-position:-5px -841px;display:none;padding-left:35px}a.hold,input.hold{background-position:-2px -453px;text-decoration:none;padding-left:23px}a.hold.disabled,input.hold.disabled{background-position:-5px -621px}a.incart{background-position:-5px -265px;color:#666;padding-left:35px}a.new{background-image:url("../images/sprite.png");background-position:-4px -922px;padding-left:23px;text-decoration:none}a.print-small{background-position:0 -423px;text-decoration:none;padding-left:30px}a.print-large{background-position:-5px -186px;text-decoration:none;padding-left:35px}a.removeitems,a.deleteshelf{background-position:2px -690px;text-decoration:none;padding-left:25px}a.removeitems.disabled,a.deleteshelf.disabled{background-position:2px -712px}a.reserve{background-position:-6px -144px;padding-left:35px}a.send{background-position:2px -386px;text-decoration:none;padding-left:28px}a.tag_add{background-position:3px -1111px;padding-left:27px;text-decoration:none}input.hold{background-color:transparent;border:0;color:#0076b2;font-weight:bold}input.editshelf{background-color:transparent;background-position:2px -736px;border:0;color:#069;cursor:pointer;filter:none;font-size:100%;padding-left:29px;text-decoration:none}.newshelf{background-position:2px -764px;border:0;color:#069;cursor:pointer;filter:none;font-size:100%;padding-left:28px;text-decoration:none}.newshelf.disabled{background-position:-4px -791px}.deleteshelf{background-color:transparent;background-position:2px -690px;border:0;color:#069;cursor:pointer;filter:none;font-size:100%;padding-left:25px;text-decoration:none}.links a{font-weight:bold}.deleteshelf:hover{color:#903}.editshelf:active,.deleteshelf:active{border:0}#tagslist li{display:inline}#login4tags{background-image:url("../images/sprite.png");background-position:-6px -1130px;background-repeat:no-repeat;padding-left:20px;text-decoration:none}.tag_results_input{margin-left:1em;padding:.3em;font-size:12px}.tag_results_input input[type="text"]{font-size:inherit;margin:0;padding:0}.tag_results_input label{display:inline}.tagsinput input[type="text"]{font-size:inherit;margin:0;padding:0}.tagsinput label{display:inline}.branch-info-tooltip{display:none}.ui-tooltip-content p{margin:.3em 0}#social_networks a{background:transparent url("../images/social-sprite.png") no-repeat;display:block;height:20px !important;width:20px;text-indent:-999em}#social_networks span{color:#274d7f;display:block;float:left;font-size:85%;font-weight:bold;line-height:2em;margin:.5em 0 .5em .5em !important}#social_networks div{float:left !important;margin:.5em 0 .5em .2em !important}#social_networks #facebook{background-position:-7px -35px}#social_networks #twitter{background-position:-7px -5px}#social_networks #linkedin{background-position:-7px -95px}#social_networks #delicious{background-position:-7px -66px}#social_networks #email{background-position:-7px -126px}#marc td,#marc th{background-color:transparent;border:0;padding:3px 5px;text-align:left}#marc td:first-child{text-indent:2em}#marc p{padding-bottom:.6em}#marc p .label{font-weight:bold}#marc ul{padding-bottom:.6em}#marc .results_summary{clear:left}#marc .results_summary ul{display:inline;float:none;clear:none;margin:0;padding:0;list-style:none}#marc .results_summary li{display:inline}#items,#items td #items th{border:1px solid #eee;font-size:90%}#plainmarc table{border:0;margin:.7em 0 0 0;font-family:monospace;font-size:95%}#plainmarc th{background-color:#fff;border:0;white-space:nowrap;text-align:left;vertical-align:top;padding:2px}#plainmarc td{border:0;padding:2px;vertical-align:top}#renewcontrols{float:right;font-size:66%}#renewcontrols a{background-repeat:no-repeat;text-decoration:none;padding:.1em .4em;padding-left:18px}#renewselected_link{background-image:url("../images/sprite.png");background-position:-5px -986px;background-repeat:no-repeat}#renewall_link{background-image:url("../images/sprite.png");background-position:-8px -967px;background-repeat:no-repeat}.authref{text-indent:2em}.authref .label{font-style:italic}.authstanza{margin-top:1em}.authstanzaheading{font-weight:bold}.authorizedheading{font-weight:bold}.authstanza li{margin-left:.5em}.authres_notes,.authres_seealso,.authres_otherscript{padding-top:.5em}.authres_notes{font-style:italic}#didyoumean{background-color:#eee;border:1px solid #e8e8e8;margin:0 0 .5em;text-align:left;padding:.5em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.suggestionlabel{font-weight:bold}.searchsuggestion{padding:.2em .5em;white-space:nowrap;display:inline-block}.authlink{padding-left:.25em}#hierarchies a{font-weight:normal;text-decoration:underline;color:#069}#hierarchies a:hover{color:#903}#top-pages{margin:0 0 .5em}.dropdown-menu>li>a{font-size:90%}a.listmenulink:link,a.listmenulink:visited{color:#0076b2;font-weight:bold}a.listmenulink:hover,a.listmenulink:active{color:#fff;font-weight:bold}#cartDetails,#cartUpdate,#holdDetails,#listsDetails{background-color:#fff;border:1px solid rgba(0,0,0,0.2);border-radius:6px 6px 6px 6px;box-shadow:0 5px 10px rgba(0,0,0,0.2);color:black;display:none;font-size:90%;margin:0;padding:8px 20px;text-align:center;width:180px;z-index:2}#cartmenulink{white-space:nowrap}#search-facets,#menu{border:1px solid #d2d2cf;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}#search-facets ul,#menu ul{margin:0;padding:.3em}#search-facets form,#menu form{margin:0}#search-facets h4,#menu h4{font-size:90%;margin:0 0 .6em 0;text-align:center}#search-facets h4 a,#menu h4 a{background-color:#f2f2ef;border-radius:8px 8px 0 0;border-bottom:1px solid #d8d8d8;display:block;font-weight:bold;padding:.7em .2em;text-decoration:none}#search-facets li,#menu li{font-size:90%;font-weight:bold;list-style-type:none}#search-facets li li,#menu li li{font-weight:normal;font-size:95%;line-height:125%;margin-bottom:2px;padding:.1em .2em}#search-facets li.showmore a,#menu li.showmore a{font-weight:bold;text-indent:1em}#search-facets a,#menu a{font-weight:normal;text-decoration:underline}#search-facets .facet-count,#menu .facet-count{display:inline-block}#menu{font-size:94%}#menu li{list-style-type:none}#menu li a{background:#eee;text-decoration:none;display:block;border:1px solid #d8d8d8;border-radius:5px 0 0 5px;border-bottom-color:#999;font-size:111%;padding:.4em .6em;margin:.4em 0;margin-right:-1px}#menu li a:hover{background:#eaeef5}#menu li.active a{background-color:#fff;background-image:none;border-right-width:0;font-weight:bold}#menu li.active a:hover{background-color:#fff}#menu h4{display:none}#addto{max-width:10em}.addto a.addtocart{background-image:url("../images/sprite.png");background-position:-5px -266px;background-repeat:no-repeat;text-decoration:none;padding-left:33px}.searchresults p{margin:0;padding:0 0 .6em 0}.searchresults p.details{color:#979797}.searchresults a.highlight_toggle{background-image:url("../images/sprite.png");background-position:-11px -841px;background-repeat:no-repeat;display:none;font-weight:normal;padding:0 10px 0 21px}.searchresults .commentline{background-color:#ffc;background-color:rgba(255,255,204,0.4);border:1px solid #ccc;display:inline-block;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);margin:.3em;padding:.4em}.searchresults .commentline.yours{background-color:#effed5;background-color:rgba(239,254,213,0.4)}.commentline .avatar{float:right;padding-left:.5em}.term{color:#900;background-color:#ffc}.shelvingloc{display:block;font-style:italic}#CheckAll,#CheckNone,.CheckAll,.CheckNone{font-weight:normal;margin:0 .5em;text-decoration:underline}span.sep{color:#888;padding:0 .2em 0 .5em;text-shadow:1px 1px 0 #fff}.pages span:first-child,.pages a:first-child{border-width:1px 1px 1px 1px;border-bottom-left-radius:3px;border-top-left-radius:3px}.pages span:last-child,.pages a:last-child{border-width:1px 1px 1px 0;border-bottom-right-radius:3px;border-top-right-radius:3px}.pages .inactive,.pages .currentPage,.pages a{-moz-border-bottom-colors:none;-moz-border-left-colors:none;-moz-border-right-colors:none;-moz-border-top-colors:none;background-color:#fff;border-color:#ddd;border-image:none;border-style:solid;border-width:1px 1px 1px 0;float:left;font-size:11.9px;line-height:20px;padding:4px 12px;text-decoration:none}.pages .inactive{background-color:#f5f5f5}.pages a[rel='last']{border-bottom-right-radius:3px;border-top-right-radius:3px}.hold-message{background-color:#fff0b1;display:inline-block;margin:.5em;padding:.2em .5em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.reserve_date,.expiration_date{white-space:nowrap}.close{color:#08c;position:inherit;top:auto;right:auto;filter:none;float:none;font-size:inherit;font-weight:normal;opacity:inherit;text-shadow:none}.close:hover{color:#538200;filter:inherit;font-size:inherit;opacity:inherit}.alert .closebtn{position:relative;top:-2px;right:-21px;line-height:20px}.modal-header .closebtn{margin-top:2px}.closebtn{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.closebtn:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.closebtn{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn-group label,.btn-group select{font-size:13px}.span2 select{width:100%}.popup .main{font-size:90%;padding:0 1em}.popup legend{line-height:1.5em;margin-bottom:.5em}.item-status{display:block;font-size:95%;margin-bottom:.5em}.available{color:#060}.waiting,.intransit,.notforloan,.checkedout,.lost,.notonhold{display:block}.notforloan{color:#900}.lost{color:#666}.suggestion{background-color:#eeeeeb;border:1px solid #ddded3;margin:1em auto;padding:.5em;width:35%;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.librarypulldown .transl1{width:auto}.nolibrarypulldown{width:68%}.nolibrarypulldown .transl1{width:87%}#opac-main-search select{width:auto;max-width:12em}#logo{background:transparent url("../images/koha-logo-navbar.png") no-repeat scroll 0;border:0;float:left !important;margin:0;padding:0;width:100px}#logo a{border:0;cursor:pointer;display:block;height:0 !important;margin:0;overflow:hidden;padding:40px 0 0;text-decoration:none;width:100px}#user-menu-trigger{display:none}#user-menu-trigger .icon-user{background:transparent url("../lib/bootstrap/img/glyphicons-halflings-white.png") no-repeat;background-position:-168px 0;background-repeat:no-repeat;height:14px;line-height:14px;margin:12px 0 0;vertical-align:text-top;width:14px}#user-menu-trigger .caret{border-bottom-color:#999;border-top-color:#999;margin-top:18px}.floating{-webkit-box-shadow:0 3px 2px 0 rgba(0,0,0,0.4);box-shadow:0 3px 2px 0 rgba(0,0,0,0.4);margin-top:0}.tdlabel{font-weight:bold;display:none}td img{max-width:none}#ulactioncontainer{min-width:16em}.notesrow label{font-weight:bold}.notesrow span{display:block}.thumbnail-shelfbrowser span{margin:0 auto}.dropdown-menu>li>a.menu-inactive:hover{background:#fff none;color:#000}.table .sorting_asc{padding-right:19px;background:url("../images/asc.gif") no-repeat scroll right center #ecede6}.table .sorting_desc{padding-right:19px;background:url("../images/desc.gif") no-repeat scroll right center #ecede6}.table .sorting{padding-right:19px;background:url("../images/ascdesc.gif") no-repeat scroll right center #ecede6}.table .nosort,.table .nosort.sorting_asc,.table .nosort.sorting_desc,.table .nosort.sorting{padding-right:19px;background:#ecede6 none}.table th,.table td{line-height:135%}.tags ul{display:inline;list-style:none;margin-left:0}.tags ul li{display:inline}.coverimages{float:right}#i18nMenu{margin-left:1em}#i18nMenu li{font-size:85%}#i18nMenu li li{font-size:100%}#i18nMenu li li>a{font-size:100%}#i18nMenu li li>a:hover{color:#fff}#i18nMenu li a{color:#0076b2}#i18nMenu .dropdown-menu li p{clear:both;display:block;font-weight:normal;line-height:20px;padding:3px 20px;white-space:nowrap}#subjectsList label,#authorSearch label{display:inline;vertical-align:middle}#subjectsList ul,#authorSearch ul{border-bottom:1px solid #eee;list-style-type:none;margin:0;padding:.6em 0}#subjectsList li,#authorSearch li{list-style-type:none;margin:0;padding:0}#overdrive-results{font-weight:bold;padding-left:1em}.throbber{vertical-align:middle}#overdrive-results-list .star-rating-control{display:block;overflow:auto}#shelfbrowser table{margin:0}#shelfbrowser table,#shelfbrowser td,#shelfbrowser th{border:0;font-size:90%;text-align:center}#shelfbrowser td,#shelfbrowser th{padding:3px 5px;width:20%}#shelfbrowser a{display:block;font-size:110%;font-weight:bold;text-decoration:none}#shelfbrowser #browser_next,#shelfbrowser #browser_previous{background-image:url("../images/sprite.png");background-repeat:no-repeat;width:16px}#shelfbrowser #browser_next a,#shelfbrowser #browser_previous a{cursor:pointer;display:block;height:0 !important;margin:0;overflow:hidden;padding:50px 0 0;text-decoration:none;width:16px}#shelfbrowser #browser_previous{background-position:-9px -1007px}#shelfbrowser #browser_next{background-position:-9px -1057px}#holds{margin:0 auto;max-width:800px}.holdrow{clear:both;padding:0 1em 1em 1em;border-bottom:1px solid #ccc;margin-bottom:.5em}.holdrow fieldset{border:0;margin:0;float:none}.holdrow fieldset .label{font-size:14px}.holdrow label{display:inline}.hold-options{clear:both}.toggle-hold-options{background-color:#eee;clear:both;display:block;font-weight:bold;margin:1em 0;padding:.5em}.copiesrow{clear:both}#idreambooksreadometer{float:right}a.idreambooksrating{font-size:30px;color:#29ade4;padding-left:85px;line-height:30px;text-decoration:none}.idreambookslegend{font-size:small}a.reviewlink,a.reviewlink:visited{text-decoration:none;color:black;font-weight:normal}.idreambookssummary a{color:#707070;text-decoration:none}.idreambookssummary img,.idbresult img{vertical-align:middle}.idbresult{color:#29ade4;text-align:center;margin:.5em;padding:.5em}.idbresult a,.idbresult a:visited{text-decoration:none;color:#29ade4}.idbresult img{padding-right:6px}.js-show{display:none}.modal-nojs .modal-header,.modal-nojs .modal-footer{display:none}.contents{width:75%}.contentblock{font-size:95%;line-height:135%;position:relative;margin-left:2em}.contents .t:first-child:before{content:"â "}.contents .t:before{content:"\A â ";white-space:pre}.contents .t{font-weight:bold;display:inline}.contents .r{display:inline}.m880{display:block;text-align:right;float:right;width:50%;padding-left:20px}#memberentry-form input.error{border-color:#c00;box-shadow:0 1px 1px #c00 inset,0 0 8px #c00;color:red;outline:0 none}#memberentry-form input.error:focus{border-color:#c00;box-shadow:0 1px 1px #c00 inset,0 0 8px #c00;color:red;outline:0 none}#memberentry-form label.error{color:#c00;float:none;font-size:90%}@media only screen and (min-width:0) and (max-width:304px){#oh:after{content:"(min-width: 0px) and (max-width: 304px)"}input,select,textarea{width:auto;max-width:11em}}@media only screen and (min-width:0) and (max-width:390px){#oh:after{content:"(min-width: 0px) and (max-width: 390px)"}.ui-tabs .ui-tabs-nav li a,.statictabs li a{padding:.1em .5em}#views{border:0;padding:0;margin:0}.view{padding:0}.view a,.view span{border:1px solid #c9c9c9;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;font-size:80%;padding:.3em .4em 4px 26px}.input-fluid{width:90%}}@media only screen and (min-width:305px) and (max-width:341px){#oh:after{content:"(min-width: 305px) and (max-width: 341px)"}}@media only screen and (min-width:342px) and (max-width:479px){#oh:after{content:"(min-width: 342px) and (max-width: 479px)"}.input-fluid{width:75%}}@media (max-width:979px){.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;margin-left:0;margin-right:0}}@media only screen and (max-width:608px){fieldset.rows label{display:block;float:none;text-align:left}fieldset.rows li{padding-bottom:.5em}fieldset.rows ol{margin-left:0}fieldset.rows .hint{margin-left:0}body{padding:0}.tdlabel{display:inline}.navbar-fixed-top,.navbar-static-top{margin:0}.navbar-inner{padding:0}.checkall,.clearall,.highlight_controls,#selections-toolbar,.selectcol,.list-actions,#remove-selected{display:none}.table td.bibliocol{padding-left:1.3em}.actions{display:block}.actions a,.actions #login4tags{background-color:#f2f2ef;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;font-weight:bold;display:block;font-size:120%;margin:2px 0}.actions .label{display:block;font-weight:bold}.actions #login4tags{margin-right:1em}#opac-main-search button,#opac-main-search input,#opac-main-search select,#opac-main-search .librarypulldown .transl1,#opac-main-search .input-append{display:block;width:97%;max-width:100%;margin:.5em 0;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}#opac-main-search .input-append{margin:0;width:100%}#opac-main-search .librarypulldown .transl1{width:94.5%}#toolbar .resort{font-size:14px;max-width:100%;margin:.5em 0;padding:4px 6px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mastheadsearch{margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.main{margin:.5em 0;padding:15px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.breadcrumb{margin:10px 0}#moresearches{text-align:center}#searchsubmit{font-weight:bold}.ui-tabs-panel .item-thumbnail,.tabs-container .item-thumbnail,#topissues .item-thumbnail,#usertags .item-thumbnail,#usersuggestions .item-thumbnail{margin:.5em 0 0 .5em}.ui-tabs-panel .table-bordered,.tabs-container .table-bordered,#topissues .table-bordered,#usertags .table-bordered,#usersuggestions .table-bordered{border:none}.ui-tabs-panel .table th,.tabs-container .table th,#topissues .table th,#usertags .table th,#usersuggestions .table th,.ui-tabs-panel .table thead,.tabs-container .table thead,#topissues .table thead,#usertags .table thead,#usersuggestions .table thead{display:none}.ui-tabs-panel .table td,.tabs-container .table td,#topissues .table td,#usertags .table td,#usersuggestions .table td{border-right:1px solid #ddd;border-left:1px solid #ddd;border-top:0;display:block;padding:.2em}.ui-tabs-panel .table p,.tabs-container .table p,#topissues .table p,#usertags .table p,#usersuggestions .table p{margin-bottom:2px}.ui-tabs-panel tr,.tabs-container tr,#topissues tr,#usertags tr,#usersuggestions tr{display:block;margin-bottom:.6em}.ui-tabs-panel tr td:first-child,.tabs-container tr td:first-child,#topissues tr td:first-child,#usertags tr td:first-child,#usersuggestions tr td:first-child{border-top:1px solid #ddd;border-radius:5px 5px 0 0}.ui-tabs-panel tr td:last-child,.tabs-container tr td:last-child,#topissues tr td:last-child,#usertags tr td:last-child,#usersuggestions tr td:last-child{border-radius:0 0 5px 5px;border-bottom:2px solid #cacaca}.no-image{display:none}}@media only screen and (max-width:700px){#opac-main-search label{display:none}#logo{background:transparent url("../lib/bootstrap/img/glyphicons-halflings-white.png") no-repeat;background-position:0 -24px;margin:14px 14px 0 14px;width:14px}#logo a{padding:14px 0 0;width:14px}#user-menu-trigger{display:inline;margin-right:12px}#members{display:none;clear:both}#members li{padding-right:20px;text-align:right;border-bottom:1px solid #555}#members li:first-child{border-top:1px solid #555}#members li:last-child{border-bottom:none}#members .nav{float:none}#members .nav.pull-right{float:none}#members .nav>li{float:none}#members .divider-vertical{border:0;height:0;margin:0}}@media only screen and (min-width:480px) and (max-width:608px){#oh:after{content:" Between 480 pixels and 608 pixels. "}.input-fluid{width:75%}}@media only screen and (min-width:608px) and (max-width:767px){#oh:after{content:" Between 608 pixels and 767 pixels. "}.main{padding:.8em 20px}.breadcrumb{margin:10px 0}.navbar-static-bottom{margin-left:-20px;margin-right:-20px}.row-fluid input.span6{width:48.9362%}}@media only screen and (max-width:767px){a.title{font-size:120%}#userresults{margin:0 -20px}.breadcrumb,#top-pages,.menu-collapse{display:none}#search-facets,#menu{margin-bottom:.5em}#search-facets h4,#menu h4{display:block;margin:0;padding:0}#search-facets h4 a,#menu h4 a{-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px;border-bottom:0;font-weight:normal;padding:.7em .2em}#search-facets ul,#menu ul{padding:0}#menu li a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border:0;display:block;font-size:120%;text-decoration:none;border-bottom:1px solid #d8d8d8;margin:0}#menu li.active a{border-top:1px solid #d8d8d8;border-right-width:1px}#menu li:last-child a{-webkit-border-radius:0 0 7px 7px;-moz-border-radius:0 0 7px 7px;border-radius:0 0 7px 7px}#search-facets li{padding:.4em}#search-facets h5{margin:.2em}#menu h4 a.menu-open,#search-facets h4 a.menu-open{-webkit-border-radius:7px 7px 0 0;-moz-border-radius:7px 7px 0 0;border-radius:7px 7px 0 0;border-bottom:1px solid #d8d8d8}}@media only screen and (max-width:800px){.cartlabel,.listslabel{display:none}.navbar .divider-vertical{margin:0 2px}.navbar #members .divider-vertical{margin:0 9px}}@media only screen and (min-width:768px){.main{margin-left:20px;margin-right:20px}#menu{border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border-right:1px solid #d8d8d8}#menu h4{display:none}#menu ul{padding:1em 0 1em 0}}@media only screen and (min-width:768px) and (max-width:984px){#oh:after{content:" Between 768 and 984 pixels. "}.librarypulldown .transl1{width:38%}}@media only screen and (min-width:984px){#oh:after{content:" Above 984 pixels. "}.librarypulldown .transl1{width:53%}}@media only screen and (max-width:1040px){.pg_menu li a{float:none;text-align:left}.pg_menu li.back_results a{border:1px solid #d0d0d0;border-width:1px 0 1px 0}#ulactioncontainer{min-width:0}} >\ No newline at end of file >+.shadowed{-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);box-shadow:0 1px 1px 0 rgba(0,0,0,0.2)}body{background-color:#eaeae6}html,body{height:100%}.no-js .dateformat{display:inline;white-space:nowrap}.no-js .modal-body{padding:0}.no-js .selections-toolbar{display:none}.js .dateformat{display:none}#wrap{min-height:100%;height:auto !important;height:100%}.popup{padding-left:0;padding-right:0}a{color:#0076b2}a.cancel{padding-left:1em}a:visited{color:#0076b2}a.title{font-weight:bold;font-size:108%}a.btn:visited{color:#333}a.btn-primary:visited{color:#fff}.ui-widget-content a,.ui-widget-content a:visited{color:#0076b2}h1{font-size:140%;line-height:150%}h1#libraryname{background:transparent url(../images/logo-koha.png) no-repeat scroll 0;border:0;float:left !important;margin:0;padding:0;width:120px}h1#libraryname a{border:0;cursor:pointer;display:block;height:0 !important;margin:0;overflow:hidden;padding:40px 0 0;text-decoration:none;width:120px}h2{font-size:130%;line-height:150%}h3{font-size:120%;line-height:150%}h4{font-size:110%}h5{font-size:100%}caption{font-size:120%;font-weight:bold;margin:0;text-align:left}input,textarea{width:auto}.input-fluid{width:50%}legend{font-size:110%;font-weight:bold}table,td{background-color:#fff}td .btn{white-space:nowrap}td .btn-link{padding:0}#advsearches label,#booleansearch label{display:inline}#basketcount{display:inline;margin:0;padding:0}#basketcount span{background-color:#ffc;color:#000;display:inline;font-size:80%;font-weight:normal;margin:0 0 0 .9em;padding:0 .3em 0 .3em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#members{display:block}#members p{color:#eee}#members a{color:#a6d8ed;font-weight:bold}#members a.logout{color:#e8583c;padding:0 .3em 0 .3em}#koha_url p{color:#666;float:right;margin:0}#moresearches{margin:.5em 0;padding:0 .8em}#moresearches li{display:inline;white-space:nowrap}#moresearches li:after{content:" | "}#moresearches ul{margin:0}#moresearches li:last-child:after{content:""}#news{margin:.5em 0}.newscontainer{border:1px solid #ddd;border-bottom-width:0;border-top-left-radius:5px;border-top-right-radius:5px}.newsheader{background-color:#ecede6;border-bottom:1px solid #ddd;margin:0;padding:8px}.newsbody{padding:8px}.newsfooter{border-bottom:1px solid #ddd;font-style:italic;padding:4px 8px}#opacheader{background-color:#ddd}#selections,.selections{font-weight:bold}.actions a{white-space:nowrap}.actions a.hold{background-image:url("../images/sprite.png");background-position:-5px -542px;background-repeat:no-repeat;margin-right:1em;padding-left:21px;text-decoration:none}.actions a.addtocart{background-image:url("../images/sprite.png");background-position:-5px -572px;background-repeat:no-repeat;margin-right:1em;padding-left:20px;text-decoration:none}.actions a.addtoshelf{background-image:url("../images/sprite.png");background-position:-5px -27px;background-repeat:no-repeat;margin-right:1em;padding-left:20px;text-decoration:none}.actions a.addtolist{background-position:-5px -27px;margin-right:1em;padding-left:20px;text-decoration:none}.actions a.tag_add{background-position:-5px -1110px;margin-right:1em;padding-left:20px;text-decoration:none}.actions a.removefromlist{background-position:-8px -690px;margin-right:1em;text-decoration:none;padding-left:15px}.alert{background:#fffbe5;background:-moz-linear-gradient(top, #fffbe5 0, #fff0b2 9%, #fff1a8 89%, #f7e665 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fffbe5), color-stop(9%, #fff0b2), color-stop(89%, #fff1a8), color-stop(100%, #f7e665));background:-webkit-linear-gradient(top, #fffbe5 0, #fff0b2 9%, #fff1a8 89%, #f7e665 100%);background:-o-linear-gradient(top, #fffbe5 0, #fff0b2 9%, #fff1a8 89%, #f7e665 100%);background:-ms-linear-gradient(top, #fffbe5 0, #fff0b2 9%, #fff1a8 89%, #f7e665 100%);background:linear-gradient(to bottom, #fffbe5 0, #fff0b2 9%, #fff1a8 89%, #f7e665 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbe5', endColorstr='#f7e665', GradientType=0);border-color:#d6c43b;color:#333}.alert-info{background:#f4f6fa;background:-moz-linear-gradient(top, #f4f6fa 0, #eaeef5 4%, #e8edf6 96%, #cddbf2 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f4f6fa), color-stop(4%, #eaeef5), color-stop(96%, #e8edf6), color-stop(100%, #cddbf2));background:-webkit-linear-gradient(top, #f4f6fa 0, #eaeef5 4%, #e8edf6 96%, #cddbf2 100%);background:-o-linear-gradient(top, #f4f6fa 0, #eaeef5 4%, #e8edf6 96%, #cddbf2 100%);background:-ms-linear-gradient(top, #f4f6fa 0, #eaeef5 4%, #e8edf6 96%, #cddbf2 100%);background:linear-gradient(to bottom, #f4f6fa 0, #eaeef5 4%, #e8edf6 96%, #cddbf2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f4f6fa', endColorstr='#cddbf2', GradientType=0);border-color:#c5d1e5;color:#333}.alert-success{background:#f8ffe8;background:-moz-linear-gradient(top, #f8ffe8 0, #e3f5ab 4%, #dcf48d 98%, #9ebf28 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f8ffe8), color-stop(4%, #e3f5ab), color-stop(98%, #dcf48d), color-stop(100%, #9ebf28));background:-webkit-linear-gradient(top, #f8ffe8 0, #e3f5ab 4%, #dcf48d 98%, #9ebf28 100%);background:-o-linear-gradient(top, #f8ffe8 0, #e3f5ab 4%, #dcf48d 98%, #9ebf28 100%);background:-ms-linear-gradient(top, #f8ffe8 0, #e3f5ab 4%, #dcf48d 98%, #9ebf28 100%);background:linear-gradient(to bottom, #f8ffe8 0, #e3f5ab 4%, #dcf48d 98%, #9ebf28 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8ffe8', endColorstr='#9ebf28', GradientType=0);border-color:#9fba35;color:#333}.breadcrumb{background-color:#f2f2ef;font-size:85%;list-style:none outside none;margin:10px 20px;padding:5px 10px;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.form-inline{display:inline;padding:0;margin:0}.form-inline fieldset{margin:.3em 0;padding:.3em}.main{background-color:#fff;border:1px solid #d2d2cf;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);margin-top:.5em;margin-bottom:.5em}.mastheadsearch{-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px;padding:.8em;margin:.5em 0;background:#c7c7c1;background:-moz-linear-gradient(top, #c7c7c1 38%, #a7a7a2 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(38%, #c7c7c1), color-stop(100%, #a7a7a2));background:-webkit-linear-gradient(top, #c7c7c1 38%, #a7a7a2 100%);background:-o-linear-gradient(top, #c7c7c1 38%, #a7a7a2 100%);background:-ms-linear-gradient(top, #c7c7c1 38%, #a7a7a2 100%);background:linear-gradient(to bottom, #c7c7c1 38%, #a7a7a2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#c7c7c1', endColorstr='#a7a7a2', GradientType=0)}.mastheadsearch label{font-size:115%;font-weight:bold}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#9fe1ff;font-weight:bold}.navbar-fixed-bottom.navbar-static-bottom{margin-top:.5em;position:static}#changelanguage .nav>.active>p{padding:0 15px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f4f4f4}.ui-tabs-nav .ui-tabs-active a,.ui-tabs-nav a:hover,.ui-tabs-nav a:focus,.ui-tabs-nav a:active,.ui-tabs-nav span.a{background:none repeat scroll 0 0 transparent;outline:0 none}.ui-widget,.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:inherit;font-size:inherit}ul.ui-tabs-nav li{list-style:none}.ui-tabs.ui-widget-content{background:transparent none;border:0}.ui-tabs .ui-tabs-panel{border:1px solid #d8d8d8;margin-bottom:1em}.ui-tabs-nav.ui-widget-header{border:0;background:none}.ui-tabs .ui-tabs-nav li{background:#f3f3f3 none;border-color:#d8d8d8;margin-right:.4em}.ui-tabs .ui-tabs-nav li.ui-tabs-active{background-color:#fff;border:1px solid #d8d8d8;border-bottom:0}.ui-tabs .ui-tabs-nav li.ui-tabs-active a{color:#000;font-weight:bold}.ui-tabs .ui-tabs-nav li.ui-state-default.ui-state-hover{background:#f3f3f3 none}.ui-tabs .ui-tabs-nav li.ui-tabs-active.ui-state-hover{background:#fff none}.ui-tabs .ui-state-default a,.ui-tabs .ui-state-default a:link,.ui-tabs .ui-state-default a:visited{color:#069}.ui-tabs .ui-state-hover a,.ui-tabs .ui-state-hover a:link,.ui-tabs .ui-state-hover a:visited{color:#903}.statictabs ul{background:none repeat scroll 0 0 transparent;border:0 none;margin:0;padding:.2em .2em 0;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:4px;border-top-left-radius:4px;color:#222;font-weight:bold;font-size:100%;line-height:1.3;list-style:none outside none;outline:0 none;text-decoration:none}.statictabs ul:before{content:"";display:table}.statictabs ul:after{clear:both;content:"";display:table}.statictabs li{background:none repeat scroll 0 0 #e6f0f2;border:1px solid #b9d8d9;border-bottom:0 none !important;border-top-right-radius:4px;border-top-left-radius:4px;float:left;list-style:none outside none;margin-bottom:0;margin-right:.4em;padding:0;position:relative;white-space:nowrap;top:1px;color:#555;font-weight:normal}.statictabs li.active{background-color:#fff;color:#212121;font-weight:normal;padding-bottom:1px}.statictabs li a{color:#004d99;cursor:pointer;float:left;padding:.5em 1em;text-decoration:none}.statictabs li a:hover{background-color:#edf4f5;border-top-right-radius:4px;border-top-left-radius:4px;color:#538200}.statictabs li.active a{color:#000;font-weight:bold;cursor:text;background:none repeat scroll 0 0 transparent;outline:0 none}.statictabs .tabs-container{border:1px solid #b9d8d9;background:none repeat scroll 0 0 transparent;display:block;padding:1em 1.4em;border-bottom-right-radius:4px;border-bottom-left-radius:4px;color:#222}.ui-datepicker table{width:100%;font-size:.9em;border:0;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{background:transparent none;padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker-trigger{vertical-align:middle;margin:0 3px}.ui-datepicker{-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);box-shadow:0 1px 1px 0 rgba(0,0,0,0.2)}.ui-widget-content{border:1px solid #aaa;background:#fff none;color:#222}.ui-widget-header{border:1px solid #aaa;background:#e6f0f2 none;color:#222;font-weight:bold}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #aaa;background:#f4f8f9 none;font-weight:normal;color:#555}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #aaa;background:#e6f0f2 none;font-weight:normal;color:#212121}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff none;font-weight:normal;color:#212121}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee;color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec;color:#cd0a0a}.ui-autocomplete{position:absolute;cursor:default;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);box-shadow:0 1px 1px 0 rgba(0,0,0,0.2)}.ui-autocomplete.ui-widget-content .ui-state-hover{border:1px solid #aaa;background:#e6f0f2 none;font-weight:normal;color:#212121}.ui-autocomplete-loading{background:#fff url("../../img/loading-small.gif") right center no-repeat}.ui-menu li{list-style:none}th{background-color:#ecede6}.item-thumbnail{max-width:none}.no-image{background-color:#fff;border:1px solid #aaa;color:#979797;display:block;font-size:86%;font-weight:bold;text-align:center;width:75px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#bookcover .no-image{margin-right:10px;margin-bottom:10px}td.overdue{color:#c33}table{font-size:90%}th.sum{text-align:right}td.sum{background-color:#ffc;font-weight:bold}th[scope=row]{background-color:transparent;text-align:right}.required{color:#c00}.label{background-color:transparent;color:inherit;display:inline;font-weight:normal;padding:0;text-shadow:none}.blabel{background-color:#999;border-radius:3px;color:#fff;display:inline-block;font-weight:bold;padding:2px 4px;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.label-important{background-color:#b94a48}.label-warning{background-color:#f89406}.label-success{background-color:#468847}.label-info{background-color:#3a87ad}.label-inverse{background-color:#333}fieldset.rows{float:left;font-size:90%;clear:left;margin:.9em 0 0 0;padding:0;width:100%}fieldset.rows legend{font-weight:bold;font-size:130%}fieldset.rows label,fieldset.rows .label{float:left;font-weight:bold;width:9em;margin-right:1em;text-align:right}fieldset.rows label.lradio{float:none;margin:inherit;width:auto}fieldset.rows fieldset{margin:0;padding:.3em}fieldset.rows ol{padding:1em 1em 0 1em;list-style-type:none}fieldset.rows ol.lradio label{width:auto;float:none;margin-right:0}fieldset.rows ol.lradio label.lradio{float:left;width:12em;margin-right:1em}fieldset.rows li{float:left;clear:left;padding-bottom:1em;list-style-type:none;width:100%}fieldset.rows li.lradio{padding-left:8.5em;width:auto}fieldset.rows li.lradio label{float:none;width:auto;margin:0 0 0 1em}fieldset.rows .hint{display:block;margin-left:11em}fieldset.action{clear:both;float:none;border:none;margin:0;padding:1em 0 .3em 0;width:auto}fieldset.action p{margin-bottom:1em}fieldset table{font-size:100%}div.rows+div.rows{margin-top:.6em}div.rows{float:left;clear:left;margin:0 0 0 0;padding:0;width:100%}div.rows span.label{float:left;font-weight:bold;width:9em;margin-right:1em;text-align:left}div.rows ol{list-style-type:none;margin-left:0;padding:.5em 1em 0 0}div.rows li{border-bottom:1px solid #eee;float:left;clear:left;padding-bottom:.2em;padding-top:.1em;list-style-type:none;width:100%}div.rows ul li{margin-left:7.3em}div.rows ul li:first-child{float:none;clear:none;margin-left:0}div.rows ol li li{border-bottom:0}.tagweight0{font-size:12px}.tagweight1{font-size:14px}.tagweight2{font-size:16px}.tagweight3{font-size:18px}.tagweight4{font-size:20px}.tagweight5{font-size:22px}.tagweight6{font-size:24px}.tagweight7{font-size:26px}.tagweight8{font-size:28px}.tagweight9{font-size:30px}.toolbar{background-color:#eee;border:1px solid #e8e8e8;font-size:85%;padding:3px 3px 5px 5px;vertical-align:middle}.toolbar a{white-space:nowrap}.toolbar label{display:inline;font-size:100%;font-weight:bold;margin-left:.5em}.toolbar select{font-size:97%;height:auto;line-height:inherit;padding:0;margin:0;width:auto;white-space:nowrap}.toolbar .hold,.toolbar #tagsel_tag{padding-left:28px;font-size:97%;font-weight:bold}.toolbar #tagsel_form{margin-top:.5em}.toolbar li{display:inline;list-style:none}.toolbar li a{border-left:1px solid #e8e8e8}.toolbar li:first-child a{border-left:0}.toolbar ul{padding-left:0}#basket .toolbar{padding:7px 5px 9px 9px}#selections-toolbar,.selections-toolbar{background:-moz-linear-gradient(top, #b2b2b2 0, #e0e0e0 14%, #e8e8e8 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0, #b2b2b2), color-stop(14%, #e0e0e0), color-stop(100%, #e8e8e8));background:-webkit-linear-gradient(top, #b2b2b2 0, #e0e0e0 14%, #e8e8e8 100%);background:-o-linear-gradient(top, #b2b2b2 0, #e0e0e0 14%, #e8e8e8 100%);background:-ms-linear-gradient(top, #b2b2b2 0, #e0e0e0 14%, #e8e8e8 100%);background:linear-gradient(top, #b2b2b2 0, #e0e0e0 14%, #e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e0e0e0', endColorstr='#e8e8e8', GradientType=0);margin:0 0 1em 0;padding-top:.5em;padding-left:10px}.list-actions{display:inline}#tagsel_span input.submit,#tagsel_tag{border:0;background-color:transparent;font-size:100%;color:#0076b2;cursor:pointer;background-image:url("../images/sprite.png");background-position:1px -643px;background-repeat:no-repeat;padding-left:25px;text-decoration:none}#tagsel_tag.disabled{background-position:-1px -667px}#tagsel_span input:hover,#selections-toolbar input.hold:hover{color:#005580;text-decoration:underline}#tagsel_span input.disabled,#tagsel_span input.disabled:hover,#tagsel_span input.hold.disabled,#tagsel_span input.hold.disabled:hover,#selections-toolbar input.hold.disabled,#selections-toolbar input.hold.disabled:hover,#selections-toolbar a.disabled,#selections-toolbar a.disabled:hover,.selections-toolbar a.disabled,.selections-toolbar a.disabled:hover{color:#888;text-decoration:none;padding-left:23px}.results_summary{display:block;font-size:85%;color:#707070;padding:0 0 .5em 0}.results_summary .results_summary{font-size:100%}.results_summary.actions{margin-top:.5em}.results_summary.tagstatus{display:inline}.results_summary .label{color:#202020}.results_summary a{font-weight:normal}#views{border-bottom:1px solid #d6d6d6;margin-bottom:.5em;padding:0 2em .2em .2em;white-space:nowrap}.view{padding:.2em .2em 2px .2em}#bibliodescriptions,#isbdcontents{clear:left;margin-top:.5em}.view a,.view span{background-image:url("../images/sprite.png");background-repeat:no-repeat;font-size:87%;font-weight:normal;padding:.4em .7em 5px 26px;text-decoration:none}span#MARCview,span#ISBDview,span#Normalview,span#Fullhistory,span#Briefhistory{font-weight:bold}a#MARCview,span#MARCview{background-position:-3px -23px}a#MARCviewPop,span#MARCviewPop{background-position:-3px -23px}a#ISBDview,span#ISBDview{background-position:-3px -52px}a#Normalview,span#Normalview{background-position:-1px 6px}.view a{background-color:#f3f3f3;border-left:1px solid #c9c9c9}#bookcover{float:left;margin:0;padding:0}#bookcover .no-image{margin-right:10px;margin-bottom:10px}#bookcover img{margin:0 1em 1em 0}.results-pagination{position:absolute;top:32px;left:-1px;width:100%;height:auto;border:1px solid #d0d0d0;display:none;background-color:#f3f3f3;padding-bottom:10px;z-index:100}.back{float:right}.back input{background:none !important;color:#999 !important}.pagination_list ul{padding-top:40px;padding-left:0}.pagination_list li{list-style:none;float:bottom;padding:4px;color:#999}.pagination_list li.highlight{background-color:#f3f3f3;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.pagination_list li a{padding-left:0}.pagination_list .li_pag_index{color:#999;float:left;font-size:15px;font-weight:bold;padding-right:10px;text-align:right;width:13px}.nav_results{background-color:#f3f3f3;border:1px solid #d0d0d0;font-size:95%;font-weight:bold;margin-top:.5em;position:relative}.nav_results .l_Results a{background:#e1e1e1 url("../images/sprite.png") no-repeat 0 -504px;color:#069;display:block;padding:8px 28px;text-decoration:none}.nav_results .l_Results:hover{background-color:#d9d9d9}.pg_menu{margin:0;border-top:1px solid #d0d0d0;white-space:nowrap}.pg_menu li{color:#b2b2b2;display:inline;list-style:none;margin:0}.pg_menu li.back_results a{border-left:1px solid #d0d0d0;border-right:1px solid #d0d0d0}.pg_menu li a,.pg_menu li span{background-color:#f3f3f3;display:block;float:left;padding:.4em .5em;text-decoration:none;font-weight:normal;text-align:center}.pg_menu li span{color:#b2b2b2}#listResults li{background-color:#999;color:#c5c5c5;font-weight:normal;display:block;margin-right:1px;font-size:80%;padding:0;text-align:center;min-width:18px}#listResults li:hover{background-color:#069}#listResults li a{color:#fff;font-weight:normal}.nav_pages .close_pagination{padding-right:10px;position:absolute;right:3px;top:-25px}.nav_pages .close_pagination a{text-decoration:none !important}.nav_pages ul{padding-top:10px}.nav_pages li{list-style:none;float:left;padding:4px;color:#999}.nav_pages li a{text-decoration:none !important}.nav_pages li a:hover{text-decoration:underline}.nav_pages li ul{float:left}#action{margin:.5em 0 0 0;background-color:#f3f3f3;border:1px solid #e8e8e8;padding-bottom:3px}#action li{list-style:none;margin:.2em;padding:.3em 0}#action a{font-weight:bold;text-decoration:none}#export li,#moresearches_menu li{padding:0;margin:0}#export li a,#moresearches_menu li a{font-weight:normal}#export li a.menu-inactive,#moresearches_menu li a.menu-inactive{font-weight:bold}#format,#furthersearches{padding-left:35px}.highlight_controls{float:left}a.addtocart,a.addtoshelf,a.brief,a.deleteshelf,a.deleteshelf.disabled,a.detail,a.download,a.editshelf,a.empty,a.hide,a.highlight_toggle,a.hold,a.hold.disabled,a.incart,a.new,a.print-small,a.print-large,a.removeitems,a.removeitems.disabled,a.reserve,a.send,a.tag_add,a.removefromlist,input.hold,input.hold.disabled,input.editshelf,.newshelf,.newshelf.disabled,.deleteshelf{background-image:url("../images/sprite.png");background-repeat:no-repeat}a.addtocart{background-position:-5px -265px;padding-left:35px}a.addtoshelf{background-position:-5px -225px;padding-left:35px}a.brief{background-position:-2px -868px;text-decoration:none;padding-left:27px}a.cartRemove{color:#c33;font-size:90%;margin:0;padding:0}a.detail{background-position:-2px -898px;text-decoration:none;padding-left:27px}a.download{background-position:-5px -348px;padding-left:20px;text-decoration:none}a.editshelf{background-position:2px -348px;padding-left:26px;text-decoration:none}a.empty{background-position:2px -598px;text-decoration:none;padding-left:30px}a.hide{background-position:-3px -814px;text-decoration:none;padding-left:26px}a.highlight_toggle{background-position:-5px -841px;display:none;padding-left:35px}a.hold,input.hold{background-position:-2px -453px;text-decoration:none;padding-left:23px}a.hold.disabled,input.hold.disabled{background-position:-5px -621px}a.incart{background-position:-5px -265px;color:#666;padding-left:35px}a.new{background-image:url("../images/sprite.png");background-position:-4px -922px;padding-left:23px;text-decoration:none}a.print-small{background-position:0 -423px;text-decoration:none;padding-left:30px}a.print-large{background-position:-5px -186px;text-decoration:none;padding-left:35px}a.removeitems,a.deleteshelf{background-position:2px -690px;text-decoration:none;padding-left:25px}a.removeitems.disabled,a.deleteshelf.disabled{background-position:2px -712px}a.reserve{background-position:-6px -144px;padding-left:35px}a.send{background-position:2px -386px;text-decoration:none;padding-left:28px}a.tag_add{background-position:3px -1111px;padding-left:27px;text-decoration:none}input.hold{background-color:transparent;border:0;color:#0076b2;font-weight:bold}input.editshelf{background-color:transparent;background-position:2px -736px;border:0;color:#069;cursor:pointer;filter:none;font-size:100%;padding-left:29px;text-decoration:none}.newshelf{background-position:2px -764px;border:0;color:#069;cursor:pointer;filter:none;font-size:100%;padding-left:28px;text-decoration:none}.newshelf.disabled{background-position:-4px -791px}.deleteshelf{background-color:transparent;background-position:2px -690px;border:0;color:#069;cursor:pointer;filter:none;font-size:100%;padding-left:25px;text-decoration:none}.links a{font-weight:bold}.deleteshelf:hover{color:#903}.editshelf:active,.deleteshelf:active{border:0}#tagslist li{display:inline}#login4tags{background-image:url("../images/sprite.png");background-position:-6px -1130px;background-repeat:no-repeat;padding-left:20px;text-decoration:none}.tag_results_input{margin-left:1em;padding:.3em;font-size:12px}.tag_results_input input[type="text"]{font-size:inherit;margin:0;padding:0}.tag_results_input label{display:inline}.tagsinput input[type="text"]{font-size:inherit;margin:0;padding:0}.tagsinput label{display:inline}.branch-info-tooltip{display:none}.ui-tooltip-content p{margin:.3em 0}#social_networks a{background:transparent url("../images/social-sprite.png") no-repeat;display:block;height:20px !important;width:20px;text-indent:-999em}#social_networks span{color:#274d7f;display:block;float:left;font-size:85%;font-weight:bold;line-height:2em;margin:.5em 0 .5em .5em !important}#social_networks div{float:left !important;margin:.5em 0 .5em .2em !important}#social_networks #facebook{background-position:-7px -35px}#social_networks #twitter{background-position:-7px -5px}#social_networks #linkedin{background-position:-7px -95px}#social_networks #delicious{background-position:-7px -66px}#social_networks #email{background-position:-7px -126px}#marc td,#marc th{background-color:transparent;border:0;padding:3px 5px;text-align:left}#marc td:first-child{text-indent:2em}#marc p{padding-bottom:.6em}#marc p .label{font-weight:bold}#marc ul{padding-bottom:.6em}#marc .results_summary{clear:left}#marc .results_summary ul{display:inline;float:none;clear:none;margin:0;padding:0;list-style:none}#marc .results_summary li{display:inline}#items,#items td #items th{border:1px solid #eee;font-size:90%}#plainmarc table{border:0;margin:.7em 0 0 0;font-family:monospace;font-size:95%}#plainmarc th{background-color:#fff;border:0;white-space:nowrap;text-align:left;vertical-align:top;padding:2px}#plainmarc td{border:0;padding:2px;vertical-align:top}#renewcontrols{float:right;font-size:66%}#renewcontrols a{background-repeat:no-repeat;text-decoration:none;padding:.1em .4em;padding-left:18px}#renewselected_link{background-image:url("../images/sprite.png");background-position:-5px -986px;background-repeat:no-repeat}#renewall_link{background-image:url("../images/sprite.png");background-position:-8px -967px;background-repeat:no-repeat}.authref{text-indent:2em}.authref .label{font-style:italic}.authstanza{margin-top:1em}.authstanzaheading{font-weight:bold}.authorizedheading{font-weight:bold}.authstanza li{margin-left:.5em}.authres_notes,.authres_seealso,.authres_otherscript{padding-top:.5em}.authres_notes{font-style:italic}#didyoumean{background-color:#eee;border:1px solid #e8e8e8;margin:0 0 .5em;text-align:left;padding:.5em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.suggestionlabel{font-weight:bold}.searchsuggestion{padding:.2em .5em;white-space:nowrap;display:inline-block}.authlink{padding-left:.25em}#hierarchies a{font-weight:normal;text-decoration:underline;color:#069}#hierarchies a:hover{color:#903}#top-pages{margin:0 0 .5em}.dropdown-menu>li>a{font-size:90%}a.listmenulink:link,a.listmenulink:visited{color:#0076b2;font-weight:bold}a.listmenulink:hover,a.listmenulink:active{color:#fff;font-weight:bold}#cartDetails,#cartUpdate,#holdDetails,#listsDetails{background-color:#fff;border:1px solid rgba(0,0,0,0.2);border-radius:6px 6px 6px 6px;box-shadow:0 5px 10px rgba(0,0,0,0.2);color:black;display:none;font-size:90%;margin:0;padding:8px 20px;text-align:center;width:180px;z-index:2}#cartmenulink{white-space:nowrap}#search-facets,#menu{border:1px solid #d2d2cf;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}#search-facets ul,#menu ul{margin:0;padding:.3em}#search-facets form,#menu form{margin:0}#search-facets h4,#menu h4{font-size:90%;margin:0 0 .6em 0;text-align:center}#search-facets h4 a,#menu h4 a{background-color:#f2f2ef;border-radius:8px 8px 0 0;border-bottom:1px solid #d8d8d8;display:block;font-weight:bold;padding:.7em .2em;text-decoration:none}#search-facets li,#menu li{font-size:90%;font-weight:bold;list-style-type:none}#search-facets li li,#menu li li{font-weight:normal;font-size:95%;line-height:125%;margin-bottom:2px;padding:.1em .2em}#search-facets li.showmore a,#menu li.showmore a{font-weight:bold;text-indent:1em}#search-facets a,#menu a{font-weight:normal;text-decoration:underline}#search-facets .facet-count,#menu .facet-count{display:inline-block}#menu{font-size:94%}#menu li{list-style-type:none}#menu li a{background:#eee;text-decoration:none;display:block;border:1px solid #d8d8d8;border-radius:5px 0 0 5px;border-bottom-color:#999;font-size:111%;padding:.4em .6em;margin:.4em 0;margin-right:-1px}#menu li a:hover{background:#eaeef5}#menu li.active a{background-color:#fff;background-image:none;border-right-width:0;font-weight:bold}#menu li.active a:hover{background-color:#fff}#menu h4{display:none}#addto{max-width:10em}.addto a.addtocart{background-image:url("../images/sprite.png");background-position:-5px -266px;background-repeat:no-repeat;text-decoration:none;padding-left:33px}.searchresults p{margin:0;padding:0 0 .6em 0}.searchresults p.details{color:#979797}.searchresults a.highlight_toggle{background-image:url("../images/sprite.png");background-position:-11px -841px;background-repeat:no-repeat;display:none;font-weight:normal;padding:0 10px 0 21px}.searchresults .commentline{background-color:#ffc;background-color:rgba(255,255,204,0.4);border:1px solid #ccc;display:inline-block;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);box-shadow:0 1px 1px 0 rgba(0,0,0,0.2);margin:.3em;padding:.4em}.searchresults .commentline.yours{background-color:#effed5;background-color:rgba(239,254,213,0.4)}.commentline .avatar{float:right;padding-left:.5em}.term{color:#900;background-color:#ffc}.shelvingloc{display:block;font-style:italic}#CheckAll,#CheckNone,.CheckAll,.CheckNone{font-weight:normal;margin:0 .5em;text-decoration:underline}span.sep{color:#888;padding:0 .2em 0 .5em;text-shadow:1px 1px 0 #fff}.pages span:first-child,.pages a:first-child{border-width:1px 1px 1px 1px;border-bottom-left-radius:3px;border-top-left-radius:3px}.pages span:last-child,.pages a:last-child{border-width:1px 1px 1px 0;border-bottom-right-radius:3px;border-top-right-radius:3px}.pages .inactive,.pages .currentPage,.pages a{-moz-border-bottom-colors:none;-moz-border-left-colors:none;-moz-border-right-colors:none;-moz-border-top-colors:none;background-color:#fff;border-color:#ddd;border-image:none;border-style:solid;border-width:1px 1px 1px 0;float:left;font-size:11.9px;line-height:20px;padding:4px 12px;text-decoration:none}.pages .inactive{background-color:#f5f5f5}.pages a[rel='last']{border-bottom-right-radius:3px;border-top-right-radius:3px}.hold-message{background-color:#fff0b1;display:inline-block;margin:.5em;padding:.2em .5em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.reserve_date,.expiration_date{white-space:nowrap}.close{color:#08c;position:inherit;top:auto;right:auto;filter:none;float:none;font-size:inherit;font-weight:normal;opacity:inherit;text-shadow:none}.close:hover{color:#538200;filter:inherit;font-size:inherit;opacity:inherit}.alert .closebtn{position:relative;top:-2px;right:-21px;line-height:20px}.modal-header .closebtn{margin-top:2px}.closebtn{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.closebtn:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.closebtn{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn-group label,.btn-group select{font-size:13px}.span2 select{width:100%}.popup .main{font-size:90%;padding:0 1em}.popup legend{line-height:1.5em;margin-bottom:.5em}.item-status{display:block;font-size:95%;margin-bottom:.5em}.available{color:#060}.waiting,.intransit,.notforloan,.checkedout,.lost,.notonhold{display:block}.notforloan{color:#900}.lost{color:#666}.suggestion{background-color:#eeeeeb;border:1px solid #ddded3;margin:1em auto;padding:.5em;width:35%;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.librarypulldown .transl1{width:auto}.nolibrarypulldown{width:68%}.nolibrarypulldown .transl1{width:87%}#opac-main-search select{width:auto;max-width:12em}#logo{background:transparent url("../images/koha-logo-navbar.png") no-repeat scroll 0;border:0;float:left !important;margin:0;padding:0;width:100px}#logo a{border:0;cursor:pointer;display:block;height:0 !important;margin:0;overflow:hidden;padding:40px 0 0;text-decoration:none;width:100px}#user-menu-trigger{display:none}#user-menu-trigger .icon-user{background:transparent url("../lib/bootstrap/img/glyphicons-halflings-white.png") no-repeat;background-position:-168px 0;background-repeat:no-repeat;height:14px;line-height:14px;margin:12px 0 0;vertical-align:text-top;width:14px}#user-menu-trigger .caret{border-bottom-color:#999;border-top-color:#999;margin-top:18px}.floating{-webkit-box-shadow:0 3px 2px 0 rgba(0,0,0,0.4);box-shadow:0 3px 2px 0 rgba(0,0,0,0.4);margin-top:0}.tdlabel{font-weight:bold;display:none}td img{max-width:none}#ulactioncontainer{min-width:16em}.notesrow label{font-weight:bold}.notesrow span{display:block}.thumbnail-shelfbrowser span{margin:0 auto}.dropdown-menu>li>a.menu-inactive:hover{background:#fff none;color:#000}.table .sorting_asc{padding-right:19px;background:url("../images/asc.gif") no-repeat scroll right center #ecede6}.table .sorting_desc{padding-right:19px;background:url("../images/desc.gif") no-repeat scroll right center #ecede6}.table .sorting{padding-right:19px;background:url("../images/ascdesc.gif") no-repeat scroll right center #ecede6}.table .nosort,.table .nosort.sorting_asc,.table .nosort.sorting_desc,.table .nosort.sorting{padding-right:19px;background:#ecede6 none}.table th,.table td{line-height:135%}.tags ul{display:inline;list-style:none;margin-left:0}.tags ul li{display:inline}.coverimages{float:right}#i18nMenu{margin-left:1em}#i18nMenu li{font-size:85%}#i18nMenu li li{font-size:100%}#i18nMenu li li>a{font-size:100%}#i18nMenu li li>a:hover{color:#fff}#i18nMenu li a{color:#0076b2}#i18nMenu .dropdown-menu li p{clear:both;display:block;font-weight:normal;line-height:20px;padding:3px 20px;white-space:nowrap}#subjectsList label,#authorSearch label{display:inline;vertical-align:middle}#subjectsList ul,#authorSearch ul{border-bottom:1px solid #eee;list-style-type:none;margin:0;padding:.6em 0}#subjectsList li,#authorSearch li{list-style-type:none;margin:0;padding:0}#overdrive-results{font-weight:bold;padding-left:1em}.throbber{vertical-align:middle}#overdrive-results-list .star-rating-control{display:block;overflow:auto}#shelfbrowser table{margin:0}#shelfbrowser table,#shelfbrowser td,#shelfbrowser th{border:0;font-size:90%;text-align:center}#shelfbrowser td,#shelfbrowser th{padding:3px 5px;width:20%}#shelfbrowser a{display:block;font-size:110%;font-weight:bold;text-decoration:none}#shelfbrowser #browser_next,#shelfbrowser #browser_previous{background-image:url("../images/sprite.png");background-repeat:no-repeat;width:16px}#shelfbrowser #browser_next a,#shelfbrowser #browser_previous a{cursor:pointer;display:block;height:0 !important;margin:0;overflow:hidden;padding:50px 0 0;text-decoration:none;width:16px}#shelfbrowser #browser_previous{background-position:-9px -1007px}#shelfbrowser #browser_next{background-position:-9px -1057px}#holds{margin:0 auto;max-width:800px}.holdrow{clear:both;padding:0 1em 1em 1em;border-bottom:1px solid #ccc;margin-bottom:.5em}.holdrow fieldset{border:0;margin:0;float:none}.holdrow fieldset .label{font-size:14px}.holdrow label{display:inline}.hold-options{clear:both}.toggle-hold-options{background-color:#eee;clear:both;display:block;font-weight:bold;margin:1em 0;padding:.5em}.copiesrow{clear:both}#idreambooksreadometer{float:right}a.idreambooksrating{font-size:30px;color:#29ade4;padding-left:85px;line-height:30px;text-decoration:none}.idreambookslegend{font-size:small}a.reviewlink,a.reviewlink:visited{text-decoration:none;color:black;font-weight:normal}.idreambookssummary a{color:#707070;text-decoration:none}.idreambookssummary img,.idbresult img{vertical-align:middle}.idbresult{color:#29ade4;text-align:center;margin:.5em;padding:.5em}.idbresult a,.idbresult a:visited{text-decoration:none;color:#29ade4}.idbresult img{padding-right:6px}.js-show{display:none}.modal-nojs .modal-header,.modal-nojs .modal-footer{display:none}.contents{width:75%}.contentblock{font-size:95%;line-height:135%;position:relative;margin-left:2em}.contents .t:first-child:before{content:"â "}.contents .t:before{content:"\A â ";white-space:pre}.contents .t{font-weight:bold;display:inline}.contents .r{display:inline}.m880{display:block;text-align:right;float:right;width:50%;padding-left:20px}#memberentry-form input.error{border-color:#c00;box-shadow:0 1px 1px #c00 inset,0 0 8px #c00;color:red;outline:0 none}#memberentry-form input.error:focus{border-color:#c00;box-shadow:0 1px 1px #c00 inset,0 0 8px #c00;color:red;outline:0 none}#memberentry-form label.error{color:#c00;float:none;font-size:90%}@media only screen and (min-width:0) and (max-width:304px){#oh:after{content:"(min-width: 0px) and (max-width: 304px)"}input,select,textarea{width:auto;max-width:11em}}@media only screen and (min-width:0) and (max-width:390px){#oh:after{content:"(min-width: 0px) and (max-width: 390px)"}.ui-tabs .ui-tabs-nav li a,.statictabs li a{padding:.1em .5em}#views{border:0;padding:0;margin:0}.view{padding:0}.view a,.view span{border:1px solid #c9c9c9;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;font-size:80%;padding:.3em .4em 4px 26px}.input-fluid{width:90%}}@media only screen and (min-width:305px) and (max-width:341px){#oh:after{content:"(min-width: 305px) and (max-width: 341px)"}}@media only screen and (min-width:342px) and (max-width:479px){#oh:after{content:"(min-width: 342px) and (max-width: 479px)"}.input-fluid{width:75%}}@media (max-width:979px){.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;margin-left:0;margin-right:0}}@media only screen and (max-width:608px){fieldset.rows label{display:block;float:none;text-align:left}fieldset.rows li{padding-bottom:.5em}fieldset.rows ol{margin-left:0}fieldset.rows .hint{margin-left:0}body{padding:0}.tdlabel{display:inline}.navbar-fixed-top,.navbar-static-top{margin:0}.navbar-inner{padding:0}.checkall,.clearall,.highlight_controls,#selections-toolbar,.selectcol,.list-actions,#remove-selected{display:none}.table td.bibliocol{padding-left:1.3em}.actions{display:block}.actions a,.actions #login4tags{background-color:#f2f2ef;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;font-weight:bold;display:block;font-size:120%;margin:2px 0}.actions .label{display:block;font-weight:bold}.actions #login4tags{margin-right:1em}#opac-main-search button,#opac-main-search input,#opac-main-search select,#opac-main-search .librarypulldown .transl1,#opac-main-search .input-append{display:block;width:97%;max-width:100%;margin:.5em 0;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}#opac-main-search .input-append{margin:0;width:100%}#opac-main-search .librarypulldown .transl1{width:94.5%}#toolbar .resort{font-size:14px;max-width:100%;margin:.5em 0;padding:4px 6px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mastheadsearch{margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.main{margin:.5em 0;padding:15px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.breadcrumb{margin:10px 0}#moresearches{text-align:center}#searchsubmit{font-weight:bold}.ui-tabs-panel .item-thumbnail,.tabs-container .item-thumbnail,#topissues .item-thumbnail,#usertags .item-thumbnail,#usersuggestions .item-thumbnail{margin:.5em 0 0 .5em}.ui-tabs-panel .table-bordered,.tabs-container .table-bordered,#topissues .table-bordered,#usertags .table-bordered,#usersuggestions .table-bordered{border:none}.ui-tabs-panel .table th,.tabs-container .table th,#topissues .table th,#usertags .table th,#usersuggestions .table th,.ui-tabs-panel .table thead,.tabs-container .table thead,#topissues .table thead,#usertags .table thead,#usersuggestions .table thead{display:none}.ui-tabs-panel .table td,.tabs-container .table td,#topissues .table td,#usertags .table td,#usersuggestions .table td{border-right:1px solid #ddd;border-left:1px solid #ddd;border-top:0;display:block;padding:.2em}.ui-tabs-panel .table p,.tabs-container .table p,#topissues .table p,#usertags .table p,#usersuggestions .table p{margin-bottom:2px}.ui-tabs-panel tr,.tabs-container tr,#topissues tr,#usertags tr,#usersuggestions tr{display:block;margin-bottom:.6em}.ui-tabs-panel tr td:first-child,.tabs-container tr td:first-child,#topissues tr td:first-child,#usertags tr td:first-child,#usersuggestions tr td:first-child{border-top:1px solid #ddd;border-radius:5px 5px 0 0}.ui-tabs-panel tr td:last-child,.tabs-container tr td:last-child,#topissues tr td:last-child,#usertags tr td:last-child,#usersuggestions tr td:last-child{border-radius:0 0 5px 5px;border-bottom:2px solid #cacaca}.no-image{display:none}}@media only screen and (max-width:700px){#opac-main-search label{display:none}#logo{background:transparent url("../lib/bootstrap/img/glyphicons-halflings-white.png") no-repeat;background-position:0 -24px;margin:14px 14px 0 14px;width:14px}#logo a{padding:14px 0 0;width:14px}#user-menu-trigger{display:inline;margin-right:12px}#members{display:none;clear:both}#members li{padding-right:20px;text-align:right;border-bottom:1px solid #555}#members li:first-child{border-top:1px solid #555}#members li:last-child{border-bottom:none}#members .nav{float:none}#members .nav.pull-right{float:none}#members .nav>li{float:none}#members .divider-vertical{border:0;height:0;margin:0}}@media only screen and (min-width:480px) and (max-width:608px){#oh:after{content:" Between 480 pixels and 608 pixels. "}.input-fluid{width:75%}}@media only screen and (min-width:608px) and (max-width:767px){#oh:after{content:" Between 608 pixels and 767 pixels. "}.main{padding:.8em 20px}.breadcrumb{margin:10px 0}.navbar-static-bottom{margin-left:-20px;margin-right:-20px}.row-fluid input.span6{width:48.9362%}}@media only screen and (max-width:767px){a.title{font-size:120%}#userresults{margin:0 -20px}.breadcrumb,#top-pages,.menu-collapse{display:none}#search-facets,#menu{margin-bottom:.5em}#search-facets h4,#menu h4{display:block;margin:0;padding:0}#search-facets h4 a,#menu h4 a{-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px;border-bottom:0;font-weight:normal;padding:.7em .2em}#search-facets ul,#menu ul{padding:0}#menu li a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border:0;display:block;font-size:120%;text-decoration:none;border-bottom:1px solid #d8d8d8;margin:0}#menu li.active a{border-top:1px solid #d8d8d8;border-right-width:1px}#menu li:last-child a{-webkit-border-radius:0 0 7px 7px;-moz-border-radius:0 0 7px 7px;border-radius:0 0 7px 7px}#search-facets li{padding:.4em}#search-facets h5{margin:.2em}#menu h4 a.menu-open,#search-facets h4 a.menu-open{-webkit-border-radius:7px 7px 0 0;-moz-border-radius:7px 7px 0 0;border-radius:7px 7px 0 0;border-bottom:1px solid #d8d8d8}}@media only screen and (max-width:800px){.cartlabel,.listslabel{display:none}.navbar .divider-vertical{margin:0 2px}.navbar #members .divider-vertical{margin:0 9px}}@media only screen and (min-width:768px){.main{margin-left:20px;margin-right:20px}#menu{border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border-right:1px solid #d8d8d8}#menu h4{display:none}#menu ul{padding:1em 0 1em 0}}@media only screen and (min-width:768px) and (max-width:984px){#oh:after{content:" Between 768 and 984 pixels. "}.librarypulldown .transl1{width:38%}}@media only screen and (min-width:984px){#oh:after{content:" Above 984 pixels. "}.librarypulldown .transl1{width:53%}}@media only screen and (max-width:1040px){.pg_menu li a{float:none;text-align:left}.pg_menu li.back_results a{border:1px solid #d0d0d0;border-width:1px 0 1px 0}#ulactioncontainer{min-width:0}}#dc_fieldset{border:1px solid #dddddd; border-width:1px;padding:5px;border-radius:10px}.label_dc{display:inline;padding:0px;margin:0px;cursor: pointer}#dc_fieldset div{display:none} >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/includes/opac-detail-sidebar.inc b/koha-tmpl/opac-tmpl/bootstrap/en/includes/opac-detail-sidebar.inc >index a4ef40e..b9972e7 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/opac-detail-sidebar.inc >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/includes/opac-detail-sidebar.inc >@@ -38,11 +38,13 @@ > <a id="format" class="dropdown-toggle" data-toggle="dropdown" href="#">Save record <b class="caret"></b></a> > <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="format"> > [% FOREACH option IN export_options %] >+ [% IF option == 'dc' %] >+ <li><a role="menuitem" href="#" data-toggle="modal" data-target="#exportModal_">Dublin Core</a></li> >+ [% ELSE %] > <li> > <a role="menuitem" href="/cgi-bin/koha/opac-export.pl?op=export&bib=[% biblionumber %]&format=[% option %]"> > [% SWITCH option %] > [% CASE 'bibtex' %]BIBTEX >- [% CASE 'dc' %]Dublin Core (XML) > [% CASE 'endnote' %]EndNote > [% CASE 'marcxml' %]MARCXML > [% CASE 'marc8' %]MARC (non-Unicode/MARC-8) >@@ -54,6 +56,7 @@ > [% END %] > </a> > </li> >+ [% END %] > [% END %] > </ul> > </div> >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt >index 6799e23..1dc71dd 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt >@@ -1153,6 +1153,84 @@ > </div> <!-- / .container-fluid --> > </div> <!-- / .main --> > >+<!-- Dublin Core Modal Form --> >+<div class="modal fade" id="exportModal_" tabindex="-1" role="dialog" aria-labelledby="exportModalLabel" aria-hidden="true"> >+ <div class="modal-header"> >+ <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">×</button> >+ <h3 class="modal-title" id="exportModalLabel">Exporting to Dublin Core...</h3> >+ </div> >+ <form method="get" action="/cgi-bin/koha/opac-export.pl"> >+ <div class="modal-body"> >+ <fieldset id="dc_fieldset"> >+ <input id="input-simple" type="radio" name="recommendation" value="simple-dc-rdf"> >+ <label class="label_dc" for="input-simple">Simple DC-RDF</label> >+ <br> >+ <input id="input-rdf" type="radio" name="recommendation" value="dc-rdf" checked> >+ <label class="label_dc" for="input-rdf">DC-RDF (Recommended)</label> >+ <div id="dc-rdf"> >+ <br><b>Output options for RDF</b> >+ <br>DC-RDF is downloadable in "rdfxml" by default (this is according with the >+ <br>recommendation), but you can download the file in other formats: >+ <br> >+ <input id="rdfxml" class="rdfoptions" type="radio" name="formats" value="rdfxml" checked> >+ <label class="label_dc" for="rdfxml">rdfxml</label> >+ <input id="rdfjson" class="rdfoptions" type="radio" name="formats" value="rdfjson"> >+ <label class="label_dc" for="rdfjson">rdfjson</label> >+ <input id="ntriples" class="rdfoptions" type="radio" name="formats" value="ntriples"> >+ <label class="label_dc" for="ntriples">ntriples</label> >+ <input id="nquads" class="rdfoptions" type="radio" name="formats" value="nquads"> >+ <label class="label_dc" for="nquads">nquads</label> >+ <input id="ntriples_canonical" class="rdfoptions" type="radio" name="formats" value="ntriples-canonical"> >+ <label class="label_dc" for="ntriples_canonical">ntriples-canonical</label> >+ <input id="turtle" class="rdfoptions" type="radio" name="formats" value="turtle"> >+ <label class="label_dc" for="turtle">turtle</label> >+ </div> >+ <br> >+ <input id="input-xml" type="radio" name="recommendation" value="dc-xml"> >+ <label class="label_dc" for="input-xml">DC-XML</label> >+ <div id="dc-xml"> >+ <p><b>Output options for DC-XML</b> >+ <br> >+ <b>Dublin Core level</b></p> >+ <p><input id="simple_dc" class="xmloptions" type="radio" name="qualifier" value="0" checked disabled> >+ <label class="label_dc" for="simple_dc">Simple Dublin Core</label> >+ <input id="qualified_dc" class="xmloptions" type="radio" name="qualifier" value="1" disabled> >+ <label class="label_dc" for="qualified_dc">Qualified Dublin Core</label></p> >+ <b>Other data (Optional)</b> >+ <br> >+ <input id="root_checked" class="xmloptions" type="checkbox" value="root"> >+ <label class="label_dc" for="root_checked">Root element: </label> >+ <input id="root_value" class="xmloptions" type="text" name="root_element" value="metadata" disabled> >+ <br>The xsischemaLocation should be filled like: >+ <br>http://example.org/myapp/ http://example.org/myapp/schema.xsd >+ <br> >+ <input id="schema_checked" class="xmloptions" type="checkbox" value="schema" disabled> >+ <label class="label_dc" for="schema_checked">xsischemaLocation: </label> >+ <input id="schema_value" class="xmloptions" type="url" name="xsischemalocation" disabled><br> >+ </div> >+ <br> >+ <input id="input-oai" type="radio" name="recommendation" value="oai-dc"> >+ <label class="label_dc" for="input-oai">OAI-DC</label> >+ <br> >+ <input id="input-srw" type="radio" name="recommendation" value="srw_dc"> >+ <label class="label_dc" for="input-srw">SRW-DC</label> >+ <br> >+ <div> >+ <br>Learn more about DCMI Specifications at: <a href="http://dublincore.org/specifications/">http://dublincore.org/specifications/</a> >+ <br> >+ </div> >+ </fieldset> >+ </div> >+ <div class="modal-footer"> >+ <button type="submit" class="btn">Export</button> >+ <button class="btn btn-link" data-dismiss="modal" aria-hidden="true">Cancel</button> >+ </div> >+ <input type="hidden" name="op" value="export" /> >+ <input type="hidden" name="format" value="dc" /> >+ <input type="hidden" name="bib" value="[% biblionumber %]" /> >+ </form> >+</div> >+ > [% INCLUDE 'opac-bottom.inc' %] > > [%# End of template %] >@@ -1854,4 +1932,88 @@ > //]]> > </script> > [% END # / IF OPACPopupAuthorsSearch %] >+[% PROCESS jqueryDC %] > [% END %] >+ >+[% BLOCK jqueryDC %] >+ <script type="text/javascript"> >+ //<![CDATA[ >+ //JQuery for Dublin Core Modal >+ $(document).ready(function(){ >+ $("#input-simple").click(function(){ >+ $(".rdfoptions").removeAttr("disabled"); >+ $(".xmloptions").attr("disabled","disabled"); >+ $("#dc-rdf").toggle(true); >+ $("#dc-xml").hide(); >+ }); >+ }); >+ >+ $(document).ready(function(){ >+ $("#input-rdf").click(function(){ >+ $(".rdfoptions").removeAttr("disabled"); >+ $(".xmloptions").attr("disabled","disabled"); >+ $("#dc-rdf").toggle(true); >+ $("#dc-xml").hide(); >+ }); >+ }); >+ >+ $(document).ready(function(){ >+ $("#input-xml").click(function(){ >+ $(".xmloptions").removeAttr("disabled"); >+ $(".rdfoptions").attr("disabled","disabled"); >+ if($("#root_checked").is(':checked')){ >+ $("#root_value").removeAttr("disabled"); >+ } else { >+ $("#root_value").attr("disabled","disabled"); >+ } >+ if($("#schema_checked").is(':checked')){ >+ $("#schema_value").removeAttr("disabled"); >+ } else { >+ $("#schema_value").attr("disabled","disabled"); >+ } >+ $("#dc-xml").toggle(); >+ $("#dc-rdf").hide(); >+ }); >+ }); >+ >+ $(document).ready(function(){ >+ $("#root_checked").click(function(){ >+ if($("#root_checked").is(':checked')){ >+ $("#root_value").removeAttr("disabled"); >+ } else { >+ $("#root_value").attr("disabled","disabled"); >+ } >+ }); >+ }); >+ >+ $(document).ready(function(){ >+ $("#schema_checked").click(function(){ >+ if($("#schema_checked").is(':checked')){ >+ $("#schema_value").removeAttr("disabled"); >+ } else { >+ $("#schema_value").attr("disabled","disabled"); >+ } >+ }); >+ }); >+ >+ $(document).ready(function(){ >+ $("#input-oai").click(function(){ >+ $(".rdfoptions").attr("disabled","disabled"); >+ $(".xmloptions").attr("disabled","disabled"); >+ $("#dc-rdf").hide(); >+ $("#dc-xml").hide(); >+ }); >+ }); >+ >+ $(document).ready(function(){ >+ $("#input-srw").click(function(){ >+ $(".rdfoptions").attr("disabled","disabled"); >+ $(".xmloptions").attr("disabled","disabled"); >+ $("#dc-rdf").hide(); >+ $("#dc-xml").hide(); >+ }); >+ }); >+ //]]> >+ </script> >+ >+[% END %] [%# End of jqueryDC %] >diff --git a/koha-tmpl/opac-tmpl/bootstrap/js/script.js b/koha-tmpl/opac-tmpl/bootstrap/js/script.js >index de8401b..a0dbbd2 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/js/script.js >+++ b/koha-tmpl/opac-tmpl/bootstrap/js/script.js >@@ -63,4 +63,4 @@ $(document).ready(function(){ > $("#members").removeAttr("style"); > } > }); >-}); >\ No newline at end of file >+}); >diff --git a/opac/opac-export.pl b/opac/opac-export.pl >index bf040db..c7bfe61 100755 >--- a/opac/opac-export.pl >+++ b/opac/opac-export.pl >@@ -34,6 +34,14 @@ my $format=$query->param("format")||'utf8'; > my $biblionumber = $query->param("bib")||0; > $biblionumber = int($biblionumber); > my ($marc, $error)= ('',''); >+my $recommendation = $query->param("recommendation"); >+my $formats = $query->param("formats"); >+my $qualifier = $query->param("qualifier"); >+my $root_element = $query->param("root_element"); >+my $xsischemalocation = $query->param("xsischemalocation"); >+my $resource_url = $query->url(-base => 1) . >+ '/cgi-bin/koha/opac-detail.pl?biblionumber=' . >+ $biblionumber; > > $marc = GetMarcBiblio($biblionumber, 1) if $biblionumber; > if(!$marc) { >@@ -61,8 +69,32 @@ elsif ($format =~ /bibtex/) { > $format = 'bibtex'; > } > elsif ($format =~ /dc/) { >- ($error,$marc) = marc2dcxml($marc,1); >- $format = "dublin-core.xml"; >+ SWITCH: >+ for ($recommendation) { >+ if (/^simple-dc-rdf/) { >+ ($error,$marc) = marc2dcxml($marc, $recommendation, 0, >+ 1, undef, undef, $resource_url , $formats); >+ $format = "dublin-core." . $formats; >+ last SWITCH; } >+ if (/^dc-rdf/) { >+ ($error,$marc) = marc2dcxml($marc, $recommendation, 1, >+ 1, undef, undef, $resource_url, $formats); >+ $format = "dublin-core." . $formats; >+ last SWITCH; } >+ if (/^dc-xml/) { >+ ($error,$marc) = marc2dcxml($marc, $recommendation, $qualifier, >+ 1, $root_element, $xsischemalocation, undef, undef); >+ $format = "dublin-core.xml"; >+ last SWITCH; } >+ if (/^oai-dc/) { >+ ($error,$marc) = marc2dcxml($marc, $recommendation); >+ $format = "dublin-core.xml"; >+ last SWITCH; } >+ if (/^srw_dc/) { >+ ($error,$marc) = marc2dcxml($marc, $recommendation); >+ $format = "dublin-core.xml"; >+ last SWITCH; } >+ } > } > elsif ($format =~ /marc8/) { > ($error,$marc) = changeEncoding($marc,"MARC","MARC21","MARC-8"); >diff --git a/t/db_dependent/Record.t b/t/db_dependent/Record.t >index e8d6094..d372c4c 100755 >--- a/t/db_dependent/Record.t >+++ b/t/db_dependent/Record.t >@@ -46,29 +46,22 @@ is ($marcxml, $testxml, "testing marc2xml"); > my $marcconvert=marcxml2marc($marcxml); > is ($marcconvert->as_xml,$marc->as_xml, "testing xml2marc"); > >-my $marcdc=marc2dcxml($marc); >-my $test2xml=qq(<?xml version="1.0" encoding="UTF-8"?> >-<metadata >- xmlns="http://example.org/myapp/" >- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >- xsi:schemaLocation="http://example.org/myapp/ http://example.org/myapp/schema.xsd" >- xmlns:dc="http://purl.org/dc/elements/1.1/" >- xmlns:dcterms="http://purl.org/dc/terms/"> >-</metadata>); >- >-is ($marcdc, $test2xml, "testing marc2dcxml"); >- >-my $marcqualified=marc2dcxml($marc,1); >-my $test3xml=qq(<?xml version="1.0" encoding="UTF-8"?> >-<metadata >- xmlns="http://example.org/myapp/" >- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >- xsi:schemaLocation="http://example.org/myapp/ http://example.org/myapp/schema.xsd" >- xmlns:dc="http://purl.org/dc/elements/1.1/" >- xmlns:dcterms="http://purl.org/dc/terms/"> >-</metadata>); >- >-is ($marcqualified, $test3xml, "testing marcQualified"); >+my $marcrdf=marc2dcxml($marc, 'dc-rdf', 1, >+ 0, undef, undef, undef, 'rdfxml'); >+my $test2xml=qq(<?xml version="1.0" encoding="utf-8"?> >+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dcam="http://purl.org/dc/dcam/" xmlns:dcterms="http://purl.org/dc/terms/"> >+</rdf:RDF> >+); >+ >+is ($marcrdf, $test2xml, "testing marc2dcxml with dc-rdf"); >+ >+my $marcdc=marc2dcxml($marc, 'dc-xml', 0, >+ 0, 'metadata', undef, undef, undef); >+my $test3xml=qq(<?xml version="1.0" encoding="utf-8"?> >+<metadata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dc="http://purl.org/dc/elements/1.1/"/> >+); >+ >+is ($marcdc, $test3xml, "testing marc2dcxml with unqualified dc-xml"); > > my $mods=marc2modsxml($marc); > my $test4xml=qq(<?xml version="1.0" encoding="UTF-8"?> >-- >1.7.10.4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 13642
:
35637
|
35638
|
35639
|
35640
|
35641
|
35642
|
35643
|
35644
|
35645
|
35663
|
35957
|
35981
|
35982
|
35983
|
35999
|
36000
|
36005
|
36006
|
36147
|
36154
|
36631
|
36632
|
36633
|
36636
|
36714
|
38220
|
38819
|
39623
|
39654
|
40786
|
40787
|
42168
|
43311
|
43313
|
43545
|
43548
|
43549
|
43586
|
43612
|
44627
|
44629
|
44658
|
44659
|
44660
|
44661
|
44662
|
44669
|
44672
|
44677
|
44727
|
44728
|
44729
|
44815
|
44816
|
44819
|
45970
|
45971
|
46514
|
46584
|
46585
|
46586
|
46587
|
46588