View | Details | Raw Unified | Return to bug 13642
Collapse All | Expand All

(-)a/C4/Installer/PerlDependencies.pm (+5 lines)
Lines 767-772 our $PERL_DEPS = { Link Here
767
        'required' => '0',
767
        'required' => '0',
768
        'min_ver'  => '0.614',
768
        'min_ver'  => '0.614',
769
    },
769
    },
770
    'RDF::Trine' => {
771
        'usage'    => 'Core',
772
        'required' => '1',
773
        'min_ver'  => '1.000',
774
    },
770
};
775
};
771
776
772
1;
777
1;
(-)a/C4/Record.pm (-22 / +105 lines)
Lines 25-31 use strict; Link Here
25
# please specify in which methods a given module is used
25
# please specify in which methods a given module is used
26
use MARC::Record; # marc2marcxml, marcxml2marc, changeEncoding
26
use MARC::Record; # marc2marcxml, marcxml2marc, changeEncoding
27
use MARC::File::XML; # marc2marcxml, marcxml2marc, changeEncoding
27
use MARC::File::XML; # marc2marcxml, marcxml2marc, changeEncoding
28
use MARC::Crosswalk::DublinCore; # marc2dcxml
28
use Koha::DublinCore; # marc2dcxml
29
use Biblio::EndnoteStyle;
29
use Biblio::EndnoteStyle;
30
use Unicode::Normalize; # _entity_encode
30
use Unicode::Normalize; # _entity_encode
31
use C4::Biblio; #marc2bibtex
31
use C4::Biblio; #marc2bibtex
Lines 219-238 sub marcxml2marc { Link Here
219
219
220
=head2 marc2dcxml - Convert from ISO-2709 to Dublin Core
220
=head2 marc2dcxml - Convert from ISO-2709 to Dublin Core
221
221
222
  my ($error,$dcxml) = marc2dcxml($marc,$qualified);
222
  ($error,$marc) = marc2dcxml($marc, $type, $qualified,
223
                              $entities, $root, $xsi_schemaLocation, $rdf_subject, $rdf_format);
223
224
224
Returns a DublinCore::Record object, will eventually return a Dublin Core scalar
225
Returns a DublinCore::Record object, will eventually return a Dublin Core scalar
225
226
226
FIXME: should return actual XML, not just an object
227
FIXME: should return actual XML, not just an object (Koha::DublinCore return an XML)
227
228
228
C<$marc> - an ISO-2709 scalar or MARC::Record object
229
C<$marc> - an ISO-2709 scalar or MARC::Record object
229
230
230
C<$qualified> - specify whether qualified Dublin Core should be used in the input or output [0]
231
C<$type> - the recommendation ( simple-dc-rdf, dc-rdf, dc-xml, oai-dc, srw_dc )
232
233
C<$qualified> - specify whether simple or qualified Dublin Core should be used in output [0 or 1]
234
235
C<$entities> placing entities to 0 will codify only the five basic entities e.g., &lt, &gt, &quot, &amp, and &apos. Conversely if it is encoded to 1, all entities will coded into decimal
236
237
C<$root> root element for XML files
238
239
C<$xsi_schemaLocation> the xsischemaLocation for XML files.
240
241
C<$rdf_subject> Represent the main subject of RDF triples (for Koha the URI of the resource)
242
243
C<$rdf_format> Imply multiple formats for RDF (ntriples, nquads, rdfxml, rdfjson, ntriples-canonical, turtle)
231
244
232
=cut
245
=cut
233
246
234
sub marc2dcxml {
247
sub marc2dcxml {
235
	my ($marc,$qualified) = @_;
248
    my ( $marc, $type, $qualified, $entities, $root, $xsi_schemaLocation, $rdf_subject,
249
        $rdf_format ) = @_;
236
	my $error;
250
	my $error;
237
    # test if it's already a MARC::Record object, if not, make it one
251
    # test if it's already a MARC::Record object, if not, make it one
238
    my $marc_record_obj;
252
    my $marc_record_obj;
Lines 246-269 sub marc2dcxml { Link Here
246
			$error .="\nCreation of MARC::Record object failed: ".$MARC::File::ERROR;
260
			$error .="\nCreation of MARC::Record object failed: ".$MARC::File::ERROR;
247
		}
261
		}
248
	}
262
	}
249
	my $crosswalk = MARC::Crosswalk::DublinCore->new;
263
    my $dcxml;
250
	if ($qualified) {
264
251
		$crosswalk = MARC::Crosswalk::DublinCore->new( qualified => 1 );
265
    SWITCH:
252
	}
266
    for ($type) {
253
	my $dcxml = $crosswalk->as_dublincore($marc_record_obj);
267
        if (/^simple-dc-rdf/) {
254
	my $dcxmlfinal = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
268
            my $objectDC = Koha::DublinCore->new({
255
	$dcxmlfinal .= "<metadata
269
                type            => 'rdf',
256
  xmlns=\"http://example.org/myapp/\"
270
                qualified       => 0,
257
  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
271
                get_marc_record => $marc,
258
  xsi:schemaLocation=\"http://example.org/myapp/ http://example.org/myapp/schema.xsd\"
272
            });
259
  xmlns:dc=\"http://purl.org/dc/elements/1.1/\"
273
260
  xmlns:dcterms=\"http://purl.org/dc/terms/\">";
274
            $objectDC->get_rdf_data({
261
275
                rdf_subject => $rdf_subject,
262
	foreach my $element ( $dcxml->elements() ) {
276
                rdf_format  => $rdf_format,
263
                $dcxmlfinal.="<"."dc:".$element->name().">".$element->content()."</"."dc:".$element->name().">\n";
277
                entities    => 1,
278
            });
279
            $dcxml = $objectDC->write_rdf();
280
            last SWITCH;
281
        }
282
        if (/^dc-rdf/) {
283
            my $objectDC = Koha::DublinCore->new({
284
                type            => 'rdf',
285
                qualified       => 1,
286
                get_marc_record => $marc,
287
            });
288
289
            $objectDC->get_rdf_data({
290
                rdf_subject => $rdf_subject,
291
                rdf_format  => $rdf_format,
292
                entities    => 1,
293
            });
294
            $dcxml = $objectDC->write_rdf();
295
            last SWITCH;
296
        }
297
        if (/^dc-xml/) {
298
            my $objectDC = Koha::DublinCore->new({
299
                type            => 'xml',
300
                qualified       => $qualified,
301
                get_marc_record => $marc,
302
            });
303
304
            $objectDC->get_xml_data({
305
                root               => $root,
306
                xsi_schemaLocation => $xsi_schemaLocation,
307
                entities           => 1,
308
            });
309
            $dcxml = $objectDC->write_xml();
310
            last SWITCH;
311
        }
312
        if (/^oai-dc/) {
313
            my $objectDC = Koha::DublinCore->new({
314
                type            => 'xml',
315
                qualified       => 0,
316
                get_marc_record => $marc,
317
            });
318
319
            $objectDC->get_xml_data({
320
                root               => 'oai_dc:dc',
321
                xsi_schemaLocation => 'http://www.openarchives.org/OAI/2.0/oai_dc/' .
322
                                      ' http://www.openarchives.org/OAI/2.0/oai_dc.xsd',
323
                entities           => 0,
324
                opt_namespace      => 'oai_dc',
325
                opt_namespace_url  => 'http://www.openarchives.org/OAI/2.0/oai_dc/',
326
            });
327
            $dcxml = $objectDC->write_xml();
328
            last SWITCH;
329
        }
330
        if (/^srw_dc/) {
331
            my $objectDC = Koha::DublinCore->new({
332
                type            => 'xml',
333
                qualified       => 0,
334
                get_marc_record => $marc,
335
            });
336
337
            $objectDC->get_xml_data({
338
                root               => 'srw_dc:dc',
339
                xsi_schemaLocation => 'info:srw/schema/1/dc-schema' .
340
                                      ' http://www.loc.gov/standards/sru/resources/dc-schema.xsd',
341
                entities           => 0,
342
                opt_namespace      => 'srw_dc',
343
                opt_namespace_url  => 'info:srw/schema/1/dc-schema',
344
            });
345
            $dcxml = $objectDC->write_xml();
346
            last SWITCH;
347
        }
264
    }
348
    }
265
	$dcxmlfinal .= "\n</metadata>";
349
    return ( $error, $dcxml );
266
	return ($error,$dcxmlfinal);
267
}
350
}
268
351
269
=head2 marc2modsxml - Convert from ISO-2709 to MODS
352
=head2 marc2modsxml - Convert from ISO-2709 to MODS
(-)a/Koha/DublinCore.pm (+1011 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
package Koha::DublinCore;
3
4
#
5
# This file is part of Koha.
6
#
7
# Copyright (C) 2014 Universidad de El Salvador,
8
# Facultad Multidisciplinaria Oriental
9
#
10
# Koha is free software; you can redistribute it and/or modify it
11
# under the terms of the GNU General Public License as published by
12
# the Free Software Foundation; either version 3 of the License, or
13
# (at your option) any later version.
14
#
15
# Koha is distributed in the hope that it will be useful, but
16
# WITHOUT ANY WARRANTY; without even the implied warranty of
17
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
# GNU General Public License for more details.
19
#
20
# You should have received a copy of the GNU General Public License
21
# along with Koha; if not, see <http://www.gnu.org/licenses>.
22
#
23
24
=head1 NAME
25
26
Koha::DublinCore - transform the values of MARC::Crosswalk::DublinCore
27
into metadata in XML or RDF format.
28
29
=head1 SYNOPSIS
30
31
=head2 XML-DC
32
33
  use Koha::DublinCore;
34
  use MARC::File::USMARC;
35
  my $batch = MARC::File::USMARC->in('in.mrc');
36
37
  #the $record will be a MARC::Record object.
38
  my $record = $batch->next();
39
40
  #Simple DC-XML
41
  my $objectDC = Koha::DublinCore->new({
42
        type => 'xml',
43
        qualified => 0,
44
        get_marc_record => $record});
45
46
  #Qualified DC-XML
47
  my $objectDC = Koha::DublinCore->new({
48
        type => 'xml',
49
        qualified => 1,
50
        get_marc_record => $record});
51
52
  #After call constructor you need to pass the root element and
53
  #the schema in .xsd format. If you prefer or you don't know nothing
54
  #about it pass the method in blank, i.e., without arguments.
55
  #Also you can determine if you want to encode with xml entities or
56
  #just with the five basics entities.
57
  #Set entities to 0 for the five basics or 1 to encode with the
58
  #complete xml entities.
59
  $objectDC->get_xml_data({
60
        root => 'metadata',
61
        xsi_schemaLocation => 'http://example.org/myapp/' .
62
                              ' http://example.org/myapp/schema.xsd',
63
  });
64
  #This print your xml file in STDOUT
65
  my $XML-DC = $objectDC->write_xml();
66
  print $XML-DC;
67
68
  #Close the file according to MARC::File::USMARC
69
  $batch->close();
70
  undef $batch;
71
72
  #Or if you want to generate a file
73
  open (OUTPUT, '> dc2xml.xml') or die $!;
74
  print OUTPUT $XML-DC;
75
  close(OUTPUT);
76
77
=head2 DC-RDF
78
79
  use Koha::DublinCore;
80
  use MARC::File::USMARC;
81
  my $marc = MARC::File::USMARC->in('in.mrc');
82
  my $record = $marc->next();
83
84
  #Simple DC-RDF is not used but not deprecated, DublinCore
85
  #can generate it as follow:
86
  my $objectDC = Koha::DublinCore->new({
87
        type => 'rdf',
88
        qualified => 0,
89
        get_marc_record => $record});
90
91
  #DC-RDF
92
  my $objectDC = Koha::DublinCore->new({
93
        type => 'rdf',
94
        qualified => 1,
95
        get_marc_record => $record});
96
97
  #The get_rdf_data method for RDF does not need to use the root element
98
  #and the schema, but you need to declare the resource being described,
99
  #i.e., the record.
100
  #Note: For Koha is the IRI identifier of the record
101
  $objectDC->get_rdf_data({
102
        rdf_subject => 'http://opac.mydomain.edu/cgi-bin/koha/opac-detail.pl?biblionumber=17589',
103
  });
104
105
  my $XML-RDF = $objectDC->write_rdf();
106
  print $XML-RDF;
107
  #Close the file according to MARC::File::USMARC
108
  $batch->close();
109
  undef $marc;
110
111
=head1 DESCRIPTION
112
113
The Koha::DublinCore defines the interface to transform
114
and manipulate MARC records into DC-XML or DC-RDF recommendation.
115
This package transform MARC records to XML or RDF/XML Dublin Core
116
and follows the recommendations listed below:
117
118
L<DC-XML-GUIDELINES [DCMI Recommendation]|http://dublincore.org/documents/dc-xml-guidelines/>
119
120
L<Expressing Simple Dublin Core in RDF-XML|http://dublincore.org/documents/dcmes-xml/>
121
This recommendation is superseded by DC-RDFrecommendation but not obsoleted at all.
122
123
L<DC-RDF [DCMI Recommendation]|http://dublincore.org/documents/dc-rdf/>
124
125
=cut
126
127
use Modern::Perl;
128
use Carp;
129
use utf8;
130
use version;
131
132
BEGIN {
133
    require Exporter;
134
135
    # set the version for version checking
136
    our $VERSION = version->declare("v0.01");
137
138
    # Inherit from Exporter to export functions and variables
139
    our @ISA = qw(Exporter);
140
141
    # Functions and variables which are exported by default
142
    our @EXPORT = qw(new get_xml_data get_rdf_data write_xml write_rdf);
143
144
    # Functions and variables which can be optionally exported
145
    our @EXPORT_OK =
146
      qw(type qualified get_marc_record root xsi_schemaLocation rdf_subject rdf_format opt_namespace opt_namespace_url);
147
148
}
149
150
use MARC::File::USMARC;
151
use MARC::Crosswalk::DublinCore;
152
use XML::LibXML;
153
use C4::Record;
154
use RDF::Trine;
155
use base qw(Class::Accessor);
156
__PACKAGE__->mk_accessors(
157
    qw(type qualified get_marc_record root xsi_schemaLocation rdf_subject rdf_format entities opt_namespace opt_namespace_url)
158
);
159
160
# Defining some constants
161
my $xsi_schema  = qq(http://www.w3.org/2001/XMLSchema-instance);
162
my $unqualified = qq(http://purl.org/dc/elements/1.1/);
163
my $qualified   = qq(http://purl.org/dc/terms/);
164
my $dcam        = qq(http://purl.org/dc/dcam/);
165
my $rdfNS       = qq(http://www.w3.org/1999/02/22-rdf-syntax-ns#);
166
my @elementupcase =
167
  qw/tableOfContents dateAccepted dateCopyrighted dateSubmitted isVersionOf hasVersion isReplacedBy isRequiredBy isPartOf hasPart isReferencedBy isFormatOf hasFormat conformsTo accrualMethod accrualPeriodicity accrualPolicy instructionalMethod rightsHolder educationLevel accessRights bibliographicCitation/;
168
my $map;
169
170
=head2 METHODS
171
172
=over 12
173
174
=item C<new>
175
176
Return a new Koha::DublinCore object.
177
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.
178
179
  my $objectDC = Koha::DublinCore->new({
180
        type => 'rdf',
181
        qualified => 0,
182
        get_marc_record => $record});
183
184
=cut
185
186
sub new {
187
    my ( $class, $args ) = @_;
188
    $args = {} unless defined $args;
189
    return bless( $args, $class );
190
}
191
192
=item C<get_xml_data>
193
194
This method is just for DC-XML: Fetch the xml root element and the schema in .xsd format.
195
196
  $objectDC->get_xml_data({
197
        root => 'metadata',
198
        xsi_schemaLocation => 'http://example.org/myapp/ http://example.org/myapp/schema.xsd',
199
        entities => 1,
200
        opt_namespace => 'oai_dc',
201
        opt_namespace_url => 'http://www.openarchives.org/OAI/2.0/oai_dc/',
202
  });
203
204
The entities argument is for extended xml entities, i.e., placing entities to zero will codify only the five basic entities e.g., &lt, &gt, &quot, &amp, and &apos. Conversely if it is encoded to one, all entities will coded into decimal.
205
206
Additionally, has been included the opt_namespace and opt_namespace_url arguments to include another XML name space, like OAI-DC or SRW-DC.
207
208
NOTE: This method is only for use of the DC-XML recommendation, i.e., type => 'xml'.
209
See C<new> method or the section SYNOPSIS.
210
211
=cut
212
213
sub get_xml_data {
214
215
    my $self = shift;
216
    my ($args) = @_;
217
218
    if (@_) {
219
        $self->root( $args->{root} );
220
        $self->xsi_schemaLocation( $args->{xsi_schemaLocation} );
221
        $self->entities( $args->{entities} );
222
        $self->opt_namespace( $args->{opt_namespace} );
223
        $self->opt_namespace_url( $args->{opt_namespace_url} );
224
    }
225
226
    #if data not filled
227
    $self->{root}     = "metadata" unless ( defined $self->{root} );
228
    $self->{entities} = 0          unless ( defined $self->{entities} );
229
    my %dataxml = (
230
        xmlroot            => $self->{root},
231
        entities           => $self->{entities},
232
        opt_namespace => $self->{opt_namespace},
233
        opt_namespace_url      => $self->{opt_namespace_url},
234
    );
235
236
    if ( exists $self->{xsi_schemaLocation} ) {
237
        $dataxml{'xsi_schemaLocation'} = $self->{xsi_schemaLocation};
238
    }
239
    if ( exists $self->{xsi_schemaLocation} ) {
240
        $dataxml{'opt_namespace'} = $self->{opt_namespace};
241
    }
242
    if ( exists $self->{xsi_schemaLocation} ) {
243
        $dataxml{'opt_namespace_url'} = $self->{opt_namespace_url};
244
    }
245
    return \%dataxml;
246
}
247
248
=item C<get_rdf_data>
249
250
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:
251
252
. ntriples
253
254
. nquads
255
256
. rdfxml
257
258
. rdfjson
259
260
. ntriples-canonical
261
262
. turtle
263
264
    $objectDC->get_rdf_data({
265
        rdf_subject => 'http://opac.mydomain.edu/cgi-bin/koha/opac-detail.pl?biblionumber=17589',
266
        rdf_format => 'rdfxml',
267
        entities => 0|1,
268
    });
269
270
NOTE: The entities is needed only for rdfxml value and is used like C<get_xml_data> method.
271
272
=cut
273
274
sub get_rdf_data {
275
276
    my $self = shift;
277
    my ($args) = @_;
278
279
    if (@_) {
280
        $self->rdf_subject( $args->{rdf_subject} );
281
        $self->rdf_format( $args->{rdf_format} );
282
        $self->entities( $args->{entities} );
283
    }
284
285
    #if data not filled
286
    $self->{rdf_subject} = "http://koha-community.org/"
287
      unless ( defined $self->{rdf_subject} );
288
    $self->{rdf_format} = "rdfxml" unless ( defined $self->{rdf_format} );
289
    $self->{entities}   = 0        unless ( defined $self->{entities} );
290
    my %rdfdescription = (
291
        rdf_subject => $self->{rdf_subject},
292
        rdf_format  => $self->{rdf_format},
293
        entities    => $self->{entities},
294
    );
295
296
    return \%rdfdescription;
297
}
298
299
=item C<conversion_to_dc>
300
301
Get the MARC record and return a Dublin Core elements, passed as argument in dc_order_execution method.
302
303
USAGE:
304
  my dc = $self->conversion_to_dc();
305
  $self->dc_order_execution ($dc, $dcxml, $root);
306
307
=cut
308
309
sub conversion_to_dc {
310
311
    my $self            = shift;
312
    my $marc_record_obj = $self->get_marc_record();
313
    my $crosswalk;
314
    my $dc;
315
316
    #if data not filled
317
    $self->qualified(0) unless ( exists $self->{qualified} );
318
    if ( $self->qualified() != 0 and $self->qualified() != 1 )
319
    {
320
        croak "Only the 0 or 1 values are accepted\n" .
321
              "Set qualified => " . $self->qualified() . " is no good, stopped";
322
    }
323
    if ( $self->qualified() == 1 ) {
324
        $crosswalk = MARC::Crosswalk::DublinCore->new( qualified => 1 );
325
    }
326
    elsif ( $self->qualified() == 0 ) {
327
        $crosswalk = MARC::Crosswalk::DublinCore->new( qualified => 0 );
328
    }
329
    if ( $marc_record_obj =~ /^MARC::Record/ ) {
330
        $dc = $crosswalk->as_dublincore($marc_record_obj);
331
    }
332
    else {
333
        croak "MARC::Record object failed or not a MARC::Record\n" .
334
              "Stopped due get_marc_record => is not a MARC::Record";
335
    }
336
337
    return $dc;
338
339
}
340
=item C<write_xml>
341
342
Return the xml object as string.
343
344
NOTE: This method is only for use of the DC-XML recommendation, i.e., type => 'xml'.
345
See C<new> and C<get_xml_data> methods or the section SYNOPSIS.
346
347
=cut
348
349
sub write_xml {
350
    my $self    = shift;
351
    my $dataxml = $self->get_xml_data();
352
    my $dc      = $self->conversion_to_dc();
353
354
    #Looking for bad data
355
    if ( $self->type() ne 'xml' and $self->type() ne 'rdf' )
356
    {
357
        croak "Only the xml or rdf values are accepted\n" .
358
              "Set type => " . $self->type() . " is no good, stopped";
359
    }
360
    elsif ( $self->type() eq 'rdf' )
361
    {
362
        croak "The constructor specified rdf\n" .
363
              "Cannot use this method with rdf. This is no good, stopped";
364
    }
365
366
    if ( $self->entities() != 0 and $self->entities() != 1 )
367
    {
368
        croak "Only the 0 or 1 values are accepted\n" .
369
              "Set entities => " . $self->entities() . " is no good, stopped";
370
    }
371
372
    #Creating XML object
373
    my $doc = XML::LibXML::Document->new( '1.0', 'utf-8' );
374
    my $root = $doc->createElement( $dataxml->{'xmlroot'} );
375
    $root->setNamespace( $xsi_schema, 'xsi', 0 );
376
377
    if ( defined $dataxml->{'opt_namespace'} ) {
378
        $root->setNamespace( $dataxml->{'opt_namespace_url'},
379
            $dataxml->{'opt_namespace'}, 0 );
380
    }
381
382
    if ( $self->type() eq 'xml' ) {
383
        if ( $self->qualified() == 0 ) {
384
            if ( defined $dataxml->{'xsi_schemaLocation'} ) {
385
                $root->setAttribute(
386
                    'xsi:schemaLocation' => $dataxml->{'xsi_schemaLocation'} );
387
                $root->setNamespace( $unqualified, 'dc', 0 );
388
                $self->dc_order_execution( $dc, $doc, $root );
389
            }
390
            else {
391
                $root->setNamespace( $unqualified, 'dc', 0 );
392
                $self->dc_order_execution( $dc, $doc, $root );
393
            }
394
        }
395
        elsif ( $self->qualified() == 1 ) {
396
            if ( defined $dataxml->{'xsi_schemaLocation'} ) {
397
                $root->setAttribute(
398
                    'xsi:schemaLocation' => $dataxml->{'xsi_schemaLocation'} );
399
                $root->setNamespace( $unqualified, 'dc',      0 );
400
                $root->setNamespace( $qualified,   'dcterms', 0 );
401
                $self->dc_order_execution( $dc, $doc, $root );
402
            }
403
            else {
404
                $root->setNamespace( $unqualified, 'dc',      0 );
405
                $root->setNamespace( $qualified,   'dcterms', 0 );
406
                $self->dc_order_execution( $dc, $doc, $root );
407
            }
408
        }
409
    }
410
411
    $doc->setDocumentElement($root);
412
413
    #Enabling or desabling entities and print the xml and, decoding string to utf8
414
    if ( $dataxml->{'entities'} == 1 ) {
415
        my $serialized_data = $doc->toString(1);
416
        utf8::decode($serialized_data);
417
        my ($dcxml_entity_encoded) = C4::Record::_entity_encode($serialized_data);
418
        $serialized_data = $dcxml_entity_encoded;
419
        return $serialized_data;
420
    }
421
    else {
422
        return $doc->toString(1);
423
    }
424
}
425
426
=item C<write_rdf>
427
428
Return the rdf object as string.
429
430
NOTE: This method is only for use of the DC-RDF recommendation, i.e., type => 'rdf'.
431
See C<new> and C<get_rdf_data> methods or the section SYNOPSIS.
432
433
=cut
434
435
sub write_rdf {
436
    my $self           = shift;
437
    my $rdfdescription = $self->get_rdf_data();
438
    my $dc             = $self->conversion_to_dc();
439
    my $serializer;
440
    my %namespaces;
441
442
    #Looking for bad data
443
    if ( $self->type() ne 'xml' and $self->type() ne 'rdf' )
444
    {
445
        croak "Only the xml or rdf values are accepted\n" .
446
              "Set type => " . $self->type() . " is no good, stopped";
447
    }
448
    elsif ( $self->type() eq 'xml' ) {
449
        croak "The constructor specified xml\n" .
450
              "Cannot use this method with xml. This is no good, stopped";
451
    }
452
453
    if ( $self->entities() != 0 and $self->entities() != 1 )
454
    {
455
        croak "Only the 0 or 1 values are accepted\n" .
456
              "Set entities => " . $self->entities() . " is no good, stopped";
457
    }
458
459
    # Creating the triple store in temporary data
460
    my $store = RDF::Trine::Store::Memory->new();
461
462
    # Creating the model
463
    my $rdf = RDF::Trine::Model->new($store);
464
465
    # Creating the subject
466
    my $subject =
467
      RDF::Trine::Node::Resource->new( $rdfdescription->{'rdf_subject'} );
468
469
    $namespaces{'rdf'} = $rdfNS;
470
471
    if ( $self->qualified() == 0 ) {
472
473
        # Declaring all namespaces in a hash
474
        $namespaces{'dc'} = $unqualified;
475
    }
476
    else {
477
478
        # Declaring all namespaces in a hash
479
        $namespaces{'dcterms'} = $qualified;
480
        $namespaces{'dcam'}    = $dcam;
481
    }
482
483
    # Creating namespaces
484
    $map = RDF::Trine::NamespaceMap->new( \%namespaces );
485
486
    if ( $self->type() eq 'rdf' ) {
487
        $self->dc_order_execution( $dc, $rdf, $subject );
488
    }
489
490
   #Enabling or desabling entities and print the xml and, decoding string to utf8
491
    if ( $rdfdescription->{'rdf_format'} eq 'rdfxml' ) {
492
        if ( $rdfdescription->{'entities'} == 1 ) {
493
            $serializer =
494
              RDF::Trine::Serializer::RDFXML->new(
495
                namespaces => {%namespaces} );
496
            my $serialized_data = $serializer->serialize_model_to_string($rdf);
497
            utf8::decode($serialized_data);
498
            my ($dcxml_entity_encoded) = C4::Record::_entity_encode($serialized_data);
499
            return $serialized_data = $dcxml_entity_encoded;
500
        }
501
        else {
502
            $serializer =
503
              RDF::Trine::Serializer::RDFXML->new(
504
                namespaces => {%namespaces} );
505
            return $serializer->serialize_model_to_string($rdf);
506
        }
507
    }
508
    elsif ( $rdfdescription->{'rdf_format'} eq 'turtle' ) {
509
        $serializer =
510
          RDF::Trine::Serializer::Turtle->new( namespaces => {%namespaces} );
511
        return $serializer->serialize_model_to_string($rdf);
512
    }
513
    else {
514
        $serializer =
515
          RDF::Trine::Serializer->new( $rdfdescription->{'rdf_format'} );
516
        return $serializer->serialize_model_to_string($rdf);
517
    }
518
}
519
520
=item C<upper_or_lowercase>
521
522
This subroutine define if is necessary to convert lowercase some qualifiers or let them as crosswalk method basis
523
524
USAGE: upper_or_lowercase (element->qualifier())
525
526
=cut
527
528
sub upper_or_lowercase {
529
530
531
    my $dcelement = $_[0];
532
    my $count     = 0;
533
    my $result;
534
    while ( $count <= $#elementupcase ) {
535
        if ( $elementupcase[$count] eq $dcelement ) {
536
            $result = $dcelement;
537
            last;
538
        }
539
        elsif ( $dcelement ne $elementupcase[$count] ) {
540
            $result = lc($dcelement);
541
            $count++;
542
            next;
543
        }
544
    }
545
546
    return $result;
547
548
}
549
550
=item C<xml_constructor>
551
552
xml_constructor ( doc, root, namespace, attr, element_name, element_content, element_qualifier, element_scheme )
553
554
USAGE: define all posible elements (name, content, qualifier, scheme) as neccesary
555
doc: the XML object
556
root: append root to doc
557
namespace: defined as "dc" or "dcterms"
558
attr: a boolean value to determinate xsi:type xml namespace for dcterms
559
Examples:
560
xml_constructor ( $dcxml, $root, "dc", 0, element->name(), element->content() );
561
xml_constructor ( $dcxml, $root, "dcterms", 1, element->name(), element->content(), $element->qualifier() );
562
563
NOTE: This is a routine not a method.
564
565
=cut
566
567
sub xml_constructor {
568
569
    my ( $doc, $root, $namespace, $attr, $element_name, $element_content,
570
        $element_qualifier, $element_scheme )
571
      = @_;
572
573
    # This scalar is used for deleting spaces in scheme elements
574
    my $deletespaces;
575
576
    # This scalar is used for making upper or lowercase the qualifier elements
577
    my $lowercase;
578
    my $tagxml;
579
580
    if ( $namespace eq "dc" ) {
581
        $lowercase = lc($element_name);
582
    }
583
    elsif ( $namespace eq "dcterms" ) {
584
        $lowercase = upper_or_lowercase($element_qualifier);
585
586
        #replacing spacial to spatial, bug from dublin or crosswalk.
587
        $lowercase =~ s/spacial/spatial/;
588
    }
589
590
    if ( ( $namespace eq "dc" or "dcterms" ) and $attr == 0 ) {
591
592
        # This will do something like: <dc:title>Title</dc:title>
593
        $tagxml = XML::LibXML::Element->new($lowercase);
594
        $tagxml->setNamespace( undef, $namespace, 1 );
595
        $tagxml->appendTextNode($element_content);
596
        $root->appendChild($tagxml);
597
    }
598
    elsif ( ( $namespace eq "dcterms" ) and $attr == 1 ) {
599
600
# This will do something like: <dcterms:spatial xsi:type="dcterms:ISO3166">us</dcterms:spatial>
601
        $deletespaces = $element_scheme;
602
        $deletespaces =~ s/\s//;
603
        $tagxml = XML::LibXML::Element->new($lowercase);
604
        $tagxml->setNamespace( undef, $namespace, 1 );
605
        my $attribute = $namespace . ':' . $deletespaces;
606
        $tagxml->setAttribute( 'xsi:type', $attribute );
607
        $tagxml->appendTextNode($element_content);
608
        $root->appendChild($tagxml);
609
    }
610
    elsif ( ( $namespace eq "dc" ) and $attr == 1 ) {
611
612
# This will do something like: <dc:subject xsi:type="dcterms:LCSH">Water supply.</dc:subject>
613
            if ( $element_scheme ne "DCMI Type Vocabulary" )
614
            {    #Dublin core returns DCMI Type Vocabulary
615
                $deletespaces = $element_scheme;
616
                $deletespaces =~ s/\s//;
617
                $tagxml = XML::LibXML::Element->new($lowercase);
618
                $tagxml->setNamespace( undef, $namespace, 1 );
619
                my $attribute = 'dcterms:' . $deletespaces;
620
                $tagxml->setAttribute( 'xsi:type', $attribute );
621
                $tagxml->appendTextNode($element_content);
622
                $root->appendChild($tagxml);
623
            }
624
            elsif ( $element_scheme eq "DCMI Type Vocabulary" )
625
            {    #Changing for DCMIType
626
                 # This will do something like: <dc:type xsi:type="dcterms:DCMIType">Text</dc:type>
627
                $tagxml = XML::LibXML::Element->new($lowercase);
628
                $tagxml->setNamespace( undef, $namespace, 1 );
629
                $tagxml->setAttribute( 'xsi:type', 'dcterms:DCMIType' );
630
                $tagxml->appendTextNode($element_content);
631
                $root->appendChild($tagxml);
632
            }
633
    }    #if...elsif
634
635
    return $tagxml;
636
637
}    #subroutine
638
639
=item C<rdf_constructor>
640
641
xml_constructor ( rdf, subject, namespace, attr, element_name, element_content, element_qualifier, element_scheme )
642
643
USAGE: define all posible elements (name, content, qualifier, scheme) as neccesary
644
rdf: the RDF object
645
subject: the subject for the triples
646
namespace: defined as "dc" or "dcterms". This is for Simple DC or DC-RDF recommendations.
647
attr: a boolean value to determine the nodeID attribute for dcterms
648
649
NOTE: This is a routine not a method.
650
651
=cut
652
653
sub rdf_constructor {
654
655
    my ( $rdf, $subject, $namespace, $attr, $element_name, $element_content,
656
        $element_qualifier, $element_scheme )
657
      = @_;
658
659
    #This scalar is used for deleting spaces in scheme elements
660
    my $deletespaces;
661
662
    #This scalar is used for making upper or lowercase the qualifier elements
663
    my $lowercase;
664
665
    if ( $namespace eq "dc" ) {
666
        $lowercase = lc($element_name);
667
    }
668
    elsif ( $namespace eq "dcterms" ) {
669
        $lowercase = upper_or_lowercase($element_qualifier);
670
671
        #replacing spacial to spatial, bug from dublin or crosswalk.
672
        $lowercase =~ s/spacial/spatial/;
673
    }
674
675
    if ( ( $namespace eq "dc" or "dcterms" ) and $attr == 0 ) {
676
677
        # This will do something like: <dc:title>Title</dc:title>
678
        my $predicate = undef;
679
        if ( $namespace eq "dc" ) {
680
            $predicate = $map->dc($lowercase);
681
        }
682
        else {
683
            $predicate = $map->dcterms($lowercase);
684
        }
685
        my $object = RDF::Trine::Node::Literal->new($element_content);
686
        my $statement =
687
          RDF::Trine::Statement->new( $subject, $predicate, $object );
688
        $rdf->add_statement($statement);
689
    }
690
    elsif ( ( $namespace eq "dc" ) and $attr == 2 ) {
691
692
        # This will do something like: <dcterms:title>Title</dcterms:title>
693
        my $predicate = $map->dcterms($lowercase);
694
        my $object    = RDF::Trine::Node::Literal->new($element_content);
695
        my $statement =
696
          RDF::Trine::Statement->new( $subject, $predicate, $object );
697
        $rdf->add_statement($statement);
698
    }
699
    elsif ( ( $namespace eq "dc" ) and $attr == 1 ) {
700
        $deletespaces = $element_scheme;
701
        $deletespaces =~ s/\s//;
702
      SWITCH:
703
        for ($element_scheme) {
704
            if (/^ISO 3166/) {
705
706
       #  Dublin core returns DCMI Type Vocabulary
707
       #  This will do something like:
708
       #    <rdf:Description rdf:nodeID="country">
709
       #        <dcam:memberOf rdf:resource="http://purl.org/dc/terms/ISO3166"/>
710
       #        <rdf:value>us</rdf:value>
711
       #    </rdf:Description>
712
       #    <dcterms:spatial rdf:nodeID="country"/>
713
                my $objectbnode = RDF::Trine::Node::Blank->new('country');
714
                my $predicate   = $map->dcterms($lowercase);
715
                my $object = RDF::Trine::Node::Literal->new($element_content);
716
                my $dcam_member_of  = $map->dcam('memberOf');
717
                my $resource_schema = $map->dcterms($deletespaces);
718
                my $rdf_value       = $map->rdf('value');
719
                my $statement1 =
720
                  RDF::Trine::Statement->new( $subject, $predicate,
721
                    $objectbnode );
722
                my $statement2 =
723
                  RDF::Trine::Statement->new( $objectbnode, $dcam_member_of,
724
                    $resource_schema );
725
                my $statement3 =
726
                  RDF::Trine::Statement->new( $objectbnode, $rdf_value,
727
                    $object );
728
                $rdf->add_statement($statement1);
729
                $rdf->add_statement($statement2);
730
                $rdf->add_statement($statement3);
731
                last SWITCH;
732
            }
733
            if (/^DCMI Type Vocabulary/) {    #Changing for DCMIType
734
                my $objectbnode = RDF::Trine::Node::Blank->new('DCMIType');
735
                my $predicate   = $map->dcterms($lowercase);
736
                my $object = RDF::Trine::Node::Literal->new($element_content);
737
                my $dcam_member_of  = $map->dcam('memberOf');
738
                my $resource_schema = $map->dcterms('DCMIType');
739
                my $rdf_value       = $map->rdf('value');
740
                my $statement1 =
741
                  RDF::Trine::Statement->new( $subject, $predicate,
742
                    $objectbnode );
743
                my $statement2 =
744
                  RDF::Trine::Statement->new( $objectbnode, $dcam_member_of,
745
                    $resource_schema );
746
                my $statement3 =
747
                  RDF::Trine::Statement->new( $objectbnode, $rdf_value,
748
                    $object );
749
                $rdf->add_statement($statement1);
750
                $rdf->add_statement($statement2);
751
                $rdf->add_statement($statement3);
752
                last SWITCH;
753
            }
754
            if (/^ISO 639-2/) {    #Changing bnodeId ISO639-2 for language
755
                my $objectbnode = RDF::Trine::Node::Blank->new('language');
756
                my $predicate   = $map->dcterms($lowercase);
757
                my $object = RDF::Trine::Node::Literal->new($element_content);
758
                my $dcam_member_of  = $map->dcam('memberOf');
759
                my $resource_schema = $map->dcterms($deletespaces);
760
                my $rdf_value       = $map->rdf('value');
761
                my $statement1 =
762
                  RDF::Trine::Statement->new( $subject, $predicate,
763
                    $objectbnode );
764
                my $statement2 =
765
                  RDF::Trine::Statement->new( $objectbnode, $dcam_member_of,
766
                    $resource_schema );
767
                my $statement3 =
768
                  RDF::Trine::Statement->new( $objectbnode, $rdf_value,
769
                    $object );
770
                $rdf->add_statement($statement1);
771
                $rdf->add_statement($statement2);
772
                $rdf->add_statement($statement3);
773
                last SWITCH;
774
            }
775
            if (/^RFC 1766/) {    #Changing bnodeId RFC1766 for languagetag
776
                my $objectbnode = RDF::Trine::Node::Blank->new('languagetag');
777
                my $predicate   = $map->dcterms($lowercase);
778
                my $object = RDF::Trine::Node::Literal->new($element_content);
779
                my $dcam_member_of  = $map->dcam('memberOf');
780
                my $resource_schema = $map->dcterms($deletespaces);
781
                my $rdf_value       = $map->rdf('value');
782
                my $statement1 =
783
                  RDF::Trine::Statement->new( $subject, $predicate,
784
                    $objectbnode );
785
                my $statement2 =
786
                  RDF::Trine::Statement->new( $objectbnode, $dcam_member_of,
787
                    $resource_schema );
788
                my $statement3 =
789
                  RDF::Trine::Statement->new( $objectbnode, $rdf_value,
790
                    $object );
791
                $rdf->add_statement($statement1);
792
                $rdf->add_statement($statement2);
793
                $rdf->add_statement($statement3);
794
                last SWITCH;
795
            }
796
            if ( /^LCSH/ || /^MeSH/ || /^LCC/ || /^DDC/ ||
797
                 /^UDC/ || /^IMT/ || /^URI/ || /^TGN/ )
798
            {    #Scheme sharing common elements
799
                my $objectbnode = RDF::Trine::Node::Blank->new($deletespaces);
800
                my $predicate   = $map->dcterms($lowercase);
801
                my $object = RDF::Trine::Node::Literal->new($element_content);
802
                my $dcam_member_of  = $map->dcam('memberOf');
803
                my $resource_schema = $map->dcterms($deletespaces);
804
                my $rdf_value       = $map->rdf('value');
805
                my $statement1 =
806
                  RDF::Trine::Statement->new( $subject, $predicate,
807
                    $objectbnode );
808
                my $statement2 =
809
                  RDF::Trine::Statement->new( $objectbnode, $dcam_member_of,
810
                    $resource_schema );
811
                my $statement3 =
812
                  RDF::Trine::Statement->new( $objectbnode, $rdf_value,
813
                    $object );
814
                $rdf->add_statement($statement1);
815
                $rdf->add_statement($statement2);
816
                $rdf->add_statement($statement3);
817
                last SWITCH;
818
            }
819
        }
820
    }    #if-elsif
821
    return $rdf;
822
}    #subroutine
823
824
=item C<dc_order_execution>
825
826
USAGE: Get the parameters for xml or rdf and execute in sequence.
827
828
  my dc = $self->conversion_to_dc();
829
  $self->dc_order_execution ($dc, $dcxml, $root);
830
831
=back
832
833
=cut
834
835
sub dc_order_execution {
836
837
    my $self = shift;
838
839
    if ( $self->type() eq 'xml' ) {    #Order for xml
840
        my ( $dc, $dcxml, $root ) = @_;
841
        foreach my $element ( $dc->elements() ) {
842
          SWITCH: {
843
                if (    $element->name()
844
                    and not defined $element->scheme()
845
                    and not defined $element->qualifier() )
846
                {
847
                    $dcxml =
848
                      xml_constructor( $dcxml, $root, "dc", 0, $element->name(),
849
                        $element->content() );
850
                    last SWITCH;
851
                }
852
853
                if (    $element->name()
854
                    and not defined $element->scheme()
855
                    and not defined $element->qualifier() )
856
                {
857
                    $dcxml =
858
                      xml_constructor( $dcxml, $root, "dcterms", 0,
859
                        $element->name(), $element->content() );
860
                    last SWITCH;
861
                }
862
863
                if (    $element->name()
864
                    and $element->scheme()
865
                    and $element->qualifier() )
866
                {
867
                    $dcxml = xml_constructor(
868
                        $dcxml,                $root,
869
                        "dcterms",             1,
870
                        $element->name(),      $element->content(),
871
                        $element->qualifier(), $element->scheme()
872
                    );
873
                    last SWITCH;
874
                }
875
876
                if (    $element->name()
877
                    and $element->scheme()
878
                    and ( $element->scheme ne "DCMI Type Vocabulary" ) )
879
                {
880
                    $dcxml =
881
                      xml_constructor( $dcxml, $root, "dc", 1, $element->name(),
882
                        $element->content(), $element->qualifier(),
883
                        $element->scheme() );
884
                    last SWITCH;
885
                }
886
887
                if (    $element->name()
888
                    and $element->scheme()
889
                    and ( $element->scheme() eq "DCMI Type Vocabulary" ) )
890
                {
891
                    $dcxml =
892
                      xml_constructor( $dcxml, $root, "dc", 1, $element->name(),
893
                        $element->content(), $element->qualifier(),
894
                        $element->scheme() );
895
                    last SWITCH;
896
                }
897
898
                if ( $element->name() and $element->qualifier() ) {
899
                    $dcxml = xml_constructor(
900
                        $dcxml,                $root,
901
                        "dcterms",             0,
902
                        $element->name(),      $element->content(),
903
                        $element->qualifier(), $element->scheme()
904
                    );
905
                    last SWITCH;
906
                }    #if
907
            }    #SWITCH
908
        }    #foreach 1
909
    }
910
    elsif ( $self->type() eq 'rdf' ) {    #Order for rdf/xml
911
        my ( $dc, $rdf, $subject ) = @_;
912
        foreach my $element ( $dc->elements() ) {
913
          SWITCH: {
914
                if (    $element->name()
915
                    and not defined $element->scheme()
916
                    and not defined $element->qualifier() )
917
                {
918
                    rdf_constructor( $rdf, $subject, "dc", 0, $element->name(),
919
                        $element->content() )
920
                      unless $self->qualified() == 1;
921
                    rdf_constructor( $rdf, $subject, "dc", 2, $element->name(),
922
                        $element->content() )
923
                      unless $self->qualified() == 0;
924
                    last SWITCH;
925
                }
926
927
                if (    $element->name()
928
                    and $element->scheme()
929
                    and ( $element->scheme ne "DCMI Type Vocabulary" ) )
930
                {
931
                    rdf_constructor( $rdf, $subject, "dc", 1, $element->name(),
932
                        $element->content(), $element->qualifier(),
933
                        $element->scheme() );
934
                    last SWITCH;
935
                }
936
937
                if (    $element->name()
938
                    and $element->scheme()
939
                    and ( $element->scheme() eq "DCMI Type Vocabulary" ) )
940
                {
941
                    rdf_constructor( $rdf, $subject, "dc", 1, $element->name(),
942
                        $element->content(), $element->qualifier(),
943
                        $element->scheme() );
944
                    last SWITCH;
945
                }
946
947
                if ( $element->name() and $element->qualifier() ) {
948
                    rdf_constructor(
949
                        $rdf,                  $subject,
950
                        "dcterms",             0,
951
                        $element->name(),      $element->content(),
952
                        $element->qualifier(), $element->scheme()
953
                    );
954
                    last SWITCH;
955
                }    #if
956
            }    #SWITCH
957
        }    #foreach 2
958
    }
959
    return;
960
}
961
962
END {
963
964
    #When opened with MARC::File::USMARC, close marc record if not closed
965
    sub DESTROY {
966
        my $self = shift;
967
        if ( $self->{get_marc_record} =~ /^MARC:File::USMARC/ ) {
968
            $self->{get_marc_record}->close();
969
            undef $self->{get_marc_record};
970
        }
971
    }
972
}
973
1;
974
__END__
975
976
=head1 VERSION
977
978
version 0.01
979
980
=head1 RELATES MODULES
981
982
This package requires the following modules:
983
984
L<DublinCore::Record>
985
986
L<MARC::Record>
987
988
L<MARC::File::USMARC>
989
990
L<MARC::Crosswalk::DublinCore>
991
992
L<XML::LibXML>
993
994
L<RDF::Trine>
995
996
L<C4::Record>
997
998
=head1 SEE ALSO
999
1000
Dublin Core Web Page L<http://dublincore.org>.
1001
1002
=head1 LICENSE
1003
1004
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.
1005
1006
=head1 AUTHOR
1007
1008
Hector Eduardo Catro Avalos E<lt> hector.hecaxmmx at gmail dot com E<gt>
1009
and the Koha Development Team.
1010
1011
=cut
(-)a/catalogue/export.pl (-2 / +34 lines)
Lines 26-31 my $format=$query->param("format"); Link Here
26
my $error = '';
26
my $error = '';
27
if ($op eq "export") {
27
if ($op eq "export") {
28
    my $biblionumber = $query->param("bib");
28
    my $biblionumber = $query->param("bib");
29
    my $recommendation = $query->param("recommendation");
30
    my $formats = $query->param("formats");
31
    my $qualifier = $query->param("qualifier");
32
    my $root_element = $query->param("root_element");
33
    my $xsischemalocation = $query->param("xsischemalocation");
34
    my $resource_url = $query->url(-base => 1) .
35
                       '/cgi-bin/koha/catalogue/detail.pl?biblionumber=' .
36
                       $biblionumber;
29
        if ($biblionumber){
37
        if ($biblionumber){
30
38
31
            my $marc = GetMarcBiblio($biblionumber, 1);
39
            my $marc = GetMarcBiblio($biblionumber, 1);
Lines 51-58 if ($op eq "export") { Link Here
51
                $format = "bibtex";
59
                $format = "bibtex";
52
            }
60
            }
53
            elsif ($format =~ /dc/) {
61
            elsif ($format =~ /dc/) {
54
                ($error,$marc) = marc2dcxml($marc,1);
62
                SWITCH:
55
                $format = "dublin-core.xml";
63
                    for ($recommendation) {
64
                        if (/^simple-dc-rdf/) {
65
                            ($error,$marc) = marc2dcxml($marc, $recommendation, 0,
66
                            1, undef, undef, $resource_url , $formats);
67
                            $format = "dublin-core." . $formats;
68
                            last SWITCH; }
69
                        if (/^dc-rdf/) {
70
                            ($error,$marc) = marc2dcxml($marc, $recommendation, 1,
71
                            1, undef, undef, $resource_url, $formats);
72
                            $format = "dublin-core." . $formats;
73
                            last SWITCH; }
74
                        if (/^dc-xml/) {
75
                            ($error,$marc) = marc2dcxml($marc, $recommendation, $qualifier,
76
                            1, $root_element, $xsischemalocation, undef, undef);
77
                            $format = "dublin-core.xml";
78
                            last SWITCH; }
79
                        if (/^oai-dc/) {
80
                            ($error,$marc) = marc2dcxml($marc, $recommendation);
81
                            $format = "dublin-core.xml";
82
                            last SWITCH; }
83
                        if (/^srw_dc/) {
84
                            ($error,$marc) = marc2dcxml($marc, $recommendation);
85
                            $format = "dublin-core.xml";
86
                            last SWITCH; }
87
                    }
56
            }
88
            }
57
            elsif ($format =~ /marc8/) {
89
            elsif ($format =~ /marc8/) {
58
                $marc = changeEncoding($marc,"MARC","MARC21","MARC-8");
90
                $marc = changeEncoding($marc,"MARC","MARC21","MARC-8");
(-)a/debian/control (-5 / +3 lines)
Lines 86-96 Build-Depends: libalgorithm-checkdigits-perl, Link Here
86
 libopenoffice-oodoc-perl,
86
 libopenoffice-oodoc-perl,
87
 libpdf-api2-perl,
87
 libpdf-api2-perl,
88
 libpdf-api2-simple-perl,
88
 libpdf-api2-simple-perl,
89
 libpdf-fromhtml-perl,
90
 libpdf-reuse-barcode-perl,
89
 libpdf-reuse-barcode-perl,
91
 libpdf-reuse-perl,
90
 libpdf-reuse-perl,
92
 libpdf-table-perl,
91
 libpdf-table-perl,
93
 libplack-middleware-reverseproxy-perl,
92
 libplack-middleware-reverseproxy-perl,
93
 librdf-trine-perl,
94
 libscalar-list-utils-perl,
94
 libscalar-list-utils-perl,
95
 libschedule-at-perl,
95
 libschedule-at-perl,
96
 libsms-send-perl,
96
 libsms-send-perl,
Lines 99-105 Build-Depends: libalgorithm-checkdigits-perl, Link Here
99
 libtemplate-perl,
99
 libtemplate-perl,
100
 libtemplate-plugin-htmltotext-perl,
100
 libtemplate-plugin-htmltotext-perl,
101
 libtemplate-plugin-json-escape-perl,
101
 libtemplate-plugin-json-escape-perl,
102
 libtemplate-plugin-stash-perl,
103
 libtest-cgi-multipart-perl,
102
 libtest-cgi-multipart-perl,
104
 libtest-deep-perl,
103
 libtest-deep-perl,
105
 libtest-harness-perl | perl-modules,
104
 libtest-harness-perl | perl-modules,
Lines 131-137 Build-Depends: libalgorithm-checkdigits-perl, Link Here
131
 libyaml-perl,
130
 libyaml-perl,
132
 libyaml-syck-perl,
131
 libyaml-syck-perl,
133
 perl,
132
 perl,
134
 perl-modules,
133
 perl-modules, 
135
 debhelper (>= 7.0.50), gettext, xsltproc, docbook-xsl,
134
 debhelper (>= 7.0.50), gettext, xsltproc, docbook-xsl,
136
 libxml2-utils, bash-completion, perl-modules (>= 5.14.2) | libtest-simple-perl (>= 0.98)
135
 libxml2-utils, bash-completion, perl-modules (>= 5.14.2) | libtest-simple-perl (>= 0.98)
137
136
Lines 291-301 Depends: libalgorithm-checkdigits-perl, Link Here
291
 libopenoffice-oodoc-perl,
290
 libopenoffice-oodoc-perl,
292
 libpdf-api2-perl,
291
 libpdf-api2-perl,
293
 libpdf-api2-simple-perl,
292
 libpdf-api2-simple-perl,
294
 libpdf-fromhtml-perl,
295
 libpdf-reuse-barcode-perl,
293
 libpdf-reuse-barcode-perl,
296
 libpdf-reuse-perl,
294
 libpdf-reuse-perl,
297
 libpdf-table-perl,
295
 libpdf-table-perl,
298
 libplack-middleware-reverseproxy-perl,
296
 libplack-middleware-reverseproxy-perl,
297
 librdf-trine-perl,
299
 libscalar-list-utils-perl,
298
 libscalar-list-utils-perl,
300
 libschedule-at-perl,
299
 libschedule-at-perl,
301
 libsms-send-perl,
300
 libsms-send-perl,
Lines 304-310 Depends: libalgorithm-checkdigits-perl, Link Here
304
 libtemplate-perl,
303
 libtemplate-perl,
305
 libtemplate-plugin-htmltotext-perl,
304
 libtemplate-plugin-htmltotext-perl,
306
 libtemplate-plugin-json-escape-perl,
305
 libtemplate-plugin-json-escape-perl,
307
 libtemplate-plugin-stash-perl,
308
 libtest-cgi-multipart-perl,
306
 libtest-cgi-multipart-perl,
309
 libtest-deep-perl,
307
 libtest-deep-perl,
310
 libtest-harness-perl | perl-modules,
308
 libtest-harness-perl | perl-modules,
(-)a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css (+10 lines)
Lines 2798-2800 div#cn_browser_table_wrapper > table#cn_browser_table { Link Here
2798
   margin: auto;
2798
   margin: auto;
2799
   width:90%;
2799
   width:90%;
2800
}
2800
}
2801
2802
/* CSS for Dublin Core Modal  */
2803
2804
#dc-rdf, #dc-xml {
2805
    display: none;
2806
}
2807
2808
.label_dc {
2809
    cursor: pointer;
2810
}
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc (-1 / +1 lines)
Lines 221-227 CAN_user_serials_create_subscription ) %] Link Here
221
    <button class="btn btn-small dropdown-toggle" data-toggle="dropdown"><i class="icon-download-alt"></i> Save <span class="caret"></span></button>
221
    <button class="btn btn-small dropdown-toggle" data-toggle="dropdown"><i class="icon-download-alt"></i> Save <span class="caret"></span></button>
222
    <ul class="dropdown-menu">
222
    <ul class="dropdown-menu">
223
        <li><a href="/cgi-bin/koha/catalogue/export.pl?format=bibtex&amp;op=export&amp;bib=[% biblionumber %]">BIBTEX</a></li>
223
        <li><a href="/cgi-bin/koha/catalogue/export.pl?format=bibtex&amp;op=export&amp;bib=[% biblionumber %]">BIBTEX</a></li>
224
        <li><a href="/cgi-bin/koha/catalogue/export.pl?format=dc&amp;op=export&amp;bib=[% biblionumber %]">Dublin Core (XML)</a></li>
224
        <li><a href="#" data-toggle="modal" data-target="#exportModal_">Dublin Core</a></li>
225
        <li><a href="/cgi-bin/koha/catalogue/export.pl?format=marcxml&amp;op=export&amp;bib=[% biblionumber %]">MARCXML</a></li>
225
        <li><a href="/cgi-bin/koha/catalogue/export.pl?format=marcxml&amp;op=export&amp;bib=[% biblionumber %]">MARCXML</a></li>
226
        <li><a href="/cgi-bin/koha/catalogue/export.pl?format=marc8&amp;op=export&amp;bib=[% biblionumber %]">MARC (non-Unicode/MARC-8)</a></li>
226
        <li><a href="/cgi-bin/koha/catalogue/export.pl?format=marc8&amp;op=export&amp;bib=[% biblionumber %]">MARC (non-Unicode/MARC-8)</a></li>
227
        <li><a href="/cgi-bin/koha/catalogue/export.pl?format=utf8&amp;op=export&amp;bib=[% biblionumber %]">MARC (Unicode/UTF-8)</a></li>
227
        <li><a href="/cgi-bin/koha/catalogue/export.pl?format=utf8&amp;op=export&amp;bib=[% biblionumber %]">MARC (Unicode/UTF-8)</a></li>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt (-1 / +158 lines)
Lines 303-308 function verify_images() { Link Here
303
303
304
        [% END %]
304
        [% END %]
305
    });
305
    });
306
307
    //JQuery for Dublin Core Modal
308
    $(document).ready(function(){
309
        $("#input-simple").click(function(){
310
            $(".rdfoptions").removeAttr("disabled");
311
            $(".xmloptions").attr("disabled","disabled");
312
            $("#dc-rdf").toggle(true);
313
            $("#dc-xml").hide();
314
        });
315
    });
316
317
    $(document).ready(function(){
318
        $("#input-rdf").click(function(){
319
            $(".rdfoptions").removeAttr("disabled");
320
            $(".xmloptions").attr("disabled","disabled");
321
            $("#dc-rdf").toggle(true);
322
            $("#dc-xml").hide();
323
        });
324
    });
325
326
    $(document).ready(function(){
327
        $("#input-xml").click(function(){
328
            $(".xmloptions").removeAttr("disabled");
329
            $(".rdfoptions").attr("disabled","disabled");
330
                if($("#root_checked").is(':checked')){
331
                    $("#root_value").removeAttr("disabled");
332
                } else {
333
                    $("#root_value").attr("disabled","disabled");
334
                }
335
                if($("#schema_checked").is(':checked')){
336
                    $("#schema_value").removeAttr("disabled");
337
                } else {
338
                    $("#schema_value").attr("disabled","disabled");
339
                }
340
                $("#dc-xml").toggle();
341
                $("#dc-rdf").hide();
342
        });
343
    });
344
345
    $(document).ready(function(){
346
        $("#root_checked").click(function(){
347
            if($("#root_checked").is(':checked')){
348
                $("#root_value").removeAttr("disabled");
349
            } else {
350
                $("#root_value").attr("disabled","disabled");
351
            }
352
        });
353
    });
354
355
    $(document).ready(function(){
356
        $("#schema_checked").click(function(){
357
            if($("#schema_checked").is(':checked')){
358
                $("#schema_value").removeAttr("disabled");
359
            } else {
360
                $("#schema_value").attr("disabled","disabled");
361
            }
362
        });
363
    });
364
365
    $(document).ready(function(){
366
        $("#input-oai").click(function(){
367
            $(".rdfoptions").attr("disabled","disabled");
368
            $(".xmloptions").attr("disabled","disabled");
369
            $("#dc-rdf").hide();
370
            $("#dc-xml").hide();
371
        });
372
    });
373
374
    $(document).ready(function(){
375
        $("#input-srw").click(function(){
376
            $(".rdfoptions").attr("disabled","disabled");
377
            $(".xmloptions").attr("disabled","disabled");
378
            $("#dc-rdf").hide();
379
            $("#dc-xml").hide();
380
        });
381
    });
382
306
//]]>
383
//]]>
307
</script>
384
</script>
308
</head>
385
</head>
Lines 1049-1055 function verify_images() { Link Here
1049
      <th>Save Record</th>   </tr>
1126
      <th>Save Record</th>   </tr>
1050
    <tr><td> Select download format:    <select name="format">
1127
    <tr><td> Select download format:    <select name="format">
1051
        <option value="mods">MODS (XML)</option>
1128
        <option value="mods">MODS (XML)</option>
1052
        <option value="dc">Dublin Core (XML)</option>
1129
        <option data-toggle="modal" data-target="#exportModal_">Dublin Core</option>
1053
        <option value="marcxml">MARCXML</option>
1130
        <option value="marcxml">MARCXML</option>
1054
        <option value="marc8">MARC (non-Unicode/MARC-8)</option>
1131
        <option value="marc8">MARC (non-Unicode/MARC-8)</option>
1055
        <option value="utf8">MARC (Unicode/UTF-8)</option>    </select>
1132
        <option value="utf8">MARC (Unicode/UTF-8)</option>    </select>
Lines 1082-1085 function verify_images() { Link Here
1082
</div>
1159
</div>
1083
[% END %]
1160
[% END %]
1084
</div>
1161
</div>
1162
1163
    <!--Modal for Dublin Core-->
1164
    <div class="modal hide" id="exportModal_" tabindex="-1" role="dialog" aria-labelledby="exportLabelexportModal_" aria-hidden="true">
1165
        <div class="modal-header">
1166
            <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">&times;</button>
1167
            <h3 id="exportLabelexportModal_">Exporting to Dublin Core...</h3>
1168
        </div>
1169
        <!-- Form to recollect data for Dublin Core-->
1170
        <form method="get" action="/cgi-bin/koha/catalogue/export.pl">
1171
        <div class="modal-body">
1172
            <fieldset>
1173
                <input id="input-simple" type="radio" name="recommendation" value="simple-dc-rdf">
1174
                <label class="label_dc" for="input-simple">Simple DC-RDF</label>
1175
                <br>
1176
                <input id="input-rdf" type="radio" name="recommendation" value="dc-rdf" checked>
1177
                <label class="label_dc" for="input-rdf">DC-RDF (Recommended)</label>
1178
                <div id="dc-rdf">
1179
                    <br><b>Output options for RDF</b>
1180
                    <br>DC-RDF is downloadable in &quot;rdfxml&quot; by default (this is according with the
1181
                    <br>recommendation),  but you can download the file in other formats:
1182
                    <br>
1183
                    <input id="rdfxml" class="rdfoptions" type="radio" name="formats" value="rdfxml" checked>
1184
                    <label class="label_dc" for="rdfxml">rdfxml</label>
1185
                    <input id="rdfjson" class="rdfoptions" type="radio" name="formats" value="rdfjson">
1186
                    <label class="label_dc" for="rdfjson">rdfjson</label>
1187
                    <input id="ntriples" class="rdfoptions" type="radio" name="formats" value="ntriples">
1188
                    <label class="label_dc" for="ntriples">ntriples</label>
1189
                    <input id="nquads" class="rdfoptions" type="radio" name="formats" value="nquads">
1190
                    <label class="label_dc" for="nquads">nquads</label>
1191
                    <input id="ntriples_canonical" class="rdfoptions" type="radio" name="formats" value="ntriples-canonical">
1192
                    <label class="label_dc" for="ntriples_canonical">ntriples-canonical</label>
1193
                    <input id="turtle" class="rdfoptions" type="radio" name="formats" value="turtle">
1194
                    <label class="label_dc" for="turtle">turtle</label>
1195
                </div>
1196
                <br>
1197
                <input id="input-xml" type="radio" name="recommendation" value="dc-xml">
1198
                <label class="label_dc" for="input-xml">DC-XML</label>
1199
                <div id="dc-xml">
1200
                    <p><b>Output options for DC-XML</b>
1201
                    <br>
1202
                    <b>Dublin Core level</b></p>
1203
                    <p><input id="simple_dc" class="xmloptions" type="radio" name="qualifier" value="0" checked disabled>
1204
                    <label class="label_dc" for="simple_dc">Simple Dublin Core</label>&nbsp;
1205
                    <input id="qualified_dc" class="xmloptions" type="radio" name="qualifier" value="1" disabled>
1206
                    <label class="label_dc" for="qualified_dc">Qualified Dublin Core</label></p>
1207
                    <b>Other data (Optional)</b>
1208
                    <br>
1209
                    <input id="root_checked" class="xmloptions" type="checkbox" value="root">
1210
                    <label class="label_dc" for="root_checked">Root element: </label>
1211
                    <input id="root_value" class="xmloptions" type="text" name="root_element" value="metadata" disabled>
1212
                    <br>The xsischemaLocation should be filled like:
1213
                    <br>http://example.org/myapp/ http://example.org/myapp/schema.xsd
1214
                    <br>
1215
                    <input id="schema_checked" class="xmloptions" type="checkbox" value="schema" disabled>
1216
                    <label class="label_dc" for="schema_checked">xsischemaLocation: </label>
1217
                    <input id="schema_value" class="xmloptions" type="url" name="xsischemalocation" disabled><br>
1218
                </div>
1219
                <br>
1220
                <input id="input-oai" type="radio" name="recommendation" value="oai-dc">
1221
                <label class="label_dc" for="input-oai">OAI-DC</label>
1222
                <br>
1223
                <input id="input-srw" type="radio" name="recommendation" value="srw_dc">
1224
                <label class="label_dc" for="input-srw">SRW-DC</label>
1225
                <br>
1226
                <div>
1227
                <br>Learn more about DCMI Specifications at: <a href="http://dublincore.org/specifications/">http://dublincore.org/specifications/</a>
1228
                <br>
1229
                </div>
1230
            </fieldset>
1231
        </div>
1232
        <div class="modal-footer">
1233
            <button type="submit" class="btn">Export</button>
1234
            <button class="btn btn-link" data-dismiss="modal" aria-hidden="true">Cancel</button>
1235
        </div>
1236
        <input type="hidden" name="op" value="export" />
1237
        <input type="hidden" name="format" value="dc" />
1238
        <input type="hidden" name="bib" value="[% biblionumber %]" />
1239
        </form>
1240
    </div>
1241
1085
[% INCLUDE 'intranet-bottom.inc' %]
1242
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/opac-tmpl/bootstrap/css/opac.css (-1 / +1 lines)
Line 1 Link Here
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}}
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}}#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}
(-)a/koha-tmpl/opac-tmpl/bootstrap/en/includes/opac-detail-sidebar.inc (-1 / +4 lines)
Lines 38-48 Link Here
38
                    <a id="format" class="dropdown-toggle" data-toggle="dropdown" href="#">Save record <b class="caret"></b></a>
38
                    <a id="format" class="dropdown-toggle" data-toggle="dropdown" href="#">Save record <b class="caret"></b></a>
39
                        <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="format">
39
                        <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="format">
40
                            [% FOREACH option IN export_options %]
40
                            [% FOREACH option IN export_options %]
41
                                [% IF option == 'dc' %]
42
                                    <li><a role="menuitem" href="#" data-toggle="modal" data-target="#exportModal_">Dublin Core</a></li>
43
                                [% ELSE %]
41
                                <li>
44
                                <li>
42
                                    <a role="menuitem" href="/cgi-bin/koha/opac-export.pl?op=export&amp;bib=[% biblionumber %]&amp;format=[% option %]">
45
                                    <a role="menuitem" href="/cgi-bin/koha/opac-export.pl?op=export&amp;bib=[% biblionumber %]&amp;format=[% option %]">
43
                                        [% SWITCH option %]
46
                                        [% SWITCH option %]
44
                                            [% CASE 'bibtex' %]BIBTEX
47
                                            [% CASE 'bibtex' %]BIBTEX
45
                                            [% CASE 'dc' %]Dublin Core (XML)
46
                                            [% CASE 'endnote' %]EndNote
48
                                            [% CASE 'endnote' %]EndNote
47
                                            [% CASE 'marcxml' %]MARCXML
49
                                            [% CASE 'marcxml' %]MARCXML
48
                                            [% CASE 'marc8' %]MARC (non-Unicode/MARC-8)
50
                                            [% CASE 'marc8' %]MARC (non-Unicode/MARC-8)
Lines 54-59 Link Here
54
                                        [% END %]
56
                                        [% END %]
55
                                    </a>
57
                                    </a>
56
                                </li>
58
                                </li>
59
                                [% END %]
57
                            [% END %]
60
                            [% END %]
58
                        </ul>
61
                        </ul>
59
                </div>
62
                </div>
(-)a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt (+162 lines)
Lines 1153-1158 Link Here
1153
</div> <!-- / .container-fluid -->
1153
</div> <!-- / .container-fluid -->
1154
</div> <!-- / .main -->
1154
</div> <!-- / .main -->
1155
1155
1156
<!-- Dublin Core Modal Form -->
1157
<div class="modal fade" id="exportModal_" tabindex="-1" role="dialog" aria-labelledby="exportModalLabel" aria-hidden="true">
1158
    <div class="modal-header">
1159
        <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">&times;</button>
1160
        <h3 class="modal-title" id="exportModalLabel">Exporting to Dublin Core...</h3>
1161
    </div>
1162
    <form method="get" action="/cgi-bin/koha/opac-export.pl">
1163
        <div class="modal-body">
1164
            <fieldset id="dc_fieldset">
1165
                <input id="input-simple" type="radio" name="recommendation" value="simple-dc-rdf">
1166
                <label class="label_dc" for="input-simple">Simple DC-RDF</label>
1167
                <br>
1168
                <input id="input-rdf" type="radio" name="recommendation" value="dc-rdf" checked>
1169
                <label class="label_dc" for="input-rdf">DC-RDF (Recommended)</label>
1170
                <div id="dc-rdf">
1171
                    <br><b>Output options for RDF</b>
1172
                    <br>DC-RDF is downloadable in &quot;rdfxml&quot; by default (this is according with the
1173
                    <br>recommendation),  but you can download the file in other formats:
1174
                    <br>
1175
                    <input id="rdfxml" class="rdfoptions" type="radio" name="formats" value="rdfxml" checked>
1176
                    <label class="label_dc" for="rdfxml">rdfxml</label>
1177
                    <input id="rdfjson" class="rdfoptions" type="radio" name="formats" value="rdfjson">
1178
                    <label class="label_dc" for="rdfjson">rdfjson</label>
1179
                    <input id="ntriples" class="rdfoptions" type="radio" name="formats" value="ntriples">
1180
                    <label class="label_dc" for="ntriples">ntriples</label>
1181
                    <input id="nquads" class="rdfoptions" type="radio" name="formats" value="nquads">
1182
                    <label class="label_dc" for="nquads">nquads</label>
1183
                    <input id="ntriples_canonical" class="rdfoptions" type="radio" name="formats" value="ntriples-canonical">
1184
                    <label class="label_dc" for="ntriples_canonical">ntriples-canonical</label>
1185
                    <input id="turtle" class="rdfoptions" type="radio" name="formats" value="turtle">
1186
                    <label class="label_dc" for="turtle">turtle</label>
1187
                </div>
1188
                <br>
1189
                <input id="input-xml" type="radio" name="recommendation" value="dc-xml">
1190
                <label class="label_dc" for="input-xml">DC-XML</label>
1191
                <div id="dc-xml">
1192
                    <p><b>Output options for DC-XML</b>
1193
                    <br>
1194
                    <b>Dublin Core level</b></p>
1195
                    <p><input id="simple_dc" class="xmloptions" type="radio" name="qualifier" value="0" checked disabled>
1196
                    <label class="label_dc" for="simple_dc">Simple Dublin Core</label>&nbsp;
1197
                    <input id="qualified_dc" class="xmloptions" type="radio" name="qualifier" value="1" disabled>
1198
                    <label class="label_dc" for="qualified_dc">Qualified Dublin Core</label></p>
1199
                    <b>Other data (Optional)</b>
1200
                    <br>
1201
                    <input id="root_checked" class="xmloptions" type="checkbox" value="root">
1202
                    <label class="label_dc" for="root_checked">Root element: </label>
1203
                    <input id="root_value" class="xmloptions" type="text" name="root_element" value="metadata" disabled>
1204
                    <br>The xsischemaLocation should be filled like:
1205
                    <br>http://example.org/myapp/ http://example.org/myapp/schema.xsd
1206
                    <br>
1207
                    <input id="schema_checked" class="xmloptions" type="checkbox" value="schema" disabled>
1208
                    <label class="label_dc" for="schema_checked">xsischemaLocation: </label>
1209
                    <input id="schema_value" class="xmloptions" type="url" name="xsischemalocation" disabled><br>
1210
                </div>
1211
                <br>
1212
                <input id="input-oai" type="radio" name="recommendation" value="oai-dc">
1213
                <label class="label_dc" for="input-oai">OAI-DC</label>
1214
                <br>
1215
                <input id="input-srw" type="radio" name="recommendation" value="srw_dc">
1216
                <label class="label_dc" for="input-srw">SRW-DC</label>
1217
                <br>
1218
                <div>
1219
                    <br>Learn more about DCMI Specifications at: <a href="http://dublincore.org/specifications/">http://dublincore.org/specifications/</a>
1220
                    <br>
1221
                </div>
1222
            </fieldset>
1223
        </div>
1224
        <div class="modal-footer">
1225
            <button type="submit" class="btn">Export</button>
1226
            <button class="btn btn-link" data-dismiss="modal" aria-hidden="true">Cancel</button>
1227
        </div>
1228
        <input type="hidden" name="op" value="export" />
1229
        <input type="hidden" name="format" value="dc" />
1230
        <input type="hidden" name="bib" value="[% biblionumber %]" />
1231
    </form>
1232
</div>
1233
1156
[% INCLUDE 'opac-bottom.inc' %]
1234
[% INCLUDE 'opac-bottom.inc' %]
1157
1235
1158
[%# End of template %]
1236
[%# End of template %]
Lines 1854-1857 Link Here
1854
    //]]>
1932
    //]]>
1855
    </script>
1933
    </script>
1856
[% END # / IF OPACPopupAuthorsSearch  %]
1934
[% END # / IF OPACPopupAuthorsSearch  %]
1935
[% PROCESS jqueryDC %]
1857
[% END %]
1936
[% END %]
1937
1938
[% BLOCK jqueryDC %]
1939
    <script type="text/javascript">
1940
    //<![CDATA[
1941
    //JQuery for Dublin Core Modal
1942
    $(document).ready(function(){
1943
        $("#input-simple").click(function(){
1944
            $(".rdfoptions").removeAttr("disabled");
1945
            $(".xmloptions").attr("disabled","disabled");
1946
            $("#dc-rdf").toggle(true);
1947
            $("#dc-xml").hide();
1948
        });
1949
    });
1950
1951
    $(document).ready(function(){
1952
        $("#input-rdf").click(function(){
1953
            $(".rdfoptions").removeAttr("disabled");
1954
            $(".xmloptions").attr("disabled","disabled");
1955
            $("#dc-rdf").toggle(true);
1956
            $("#dc-xml").hide();
1957
        });
1958
    });
1959
1960
    $(document).ready(function(){
1961
        $("#input-xml").click(function(){
1962
            $(".xmloptions").removeAttr("disabled");
1963
            $(".rdfoptions").attr("disabled","disabled");
1964
                if($("#root_checked").is(':checked')){
1965
                    $("#root_value").removeAttr("disabled");
1966
                } else {
1967
                    $("#root_value").attr("disabled","disabled");
1968
                }
1969
                if($("#schema_checked").is(':checked')){
1970
                    $("#schema_value").removeAttr("disabled");
1971
                } else {
1972
                    $("#schema_value").attr("disabled","disabled");
1973
                }
1974
                $("#dc-xml").toggle();
1975
                $("#dc-rdf").hide();
1976
        });
1977
    });
1978
1979
    $(document).ready(function(){
1980
        $("#root_checked").click(function(){
1981
            if($("#root_checked").is(':checked')){
1982
                $("#root_value").removeAttr("disabled");
1983
            } else {
1984
                $("#root_value").attr("disabled","disabled");
1985
            }
1986
        });
1987
    });
1988
1989
    $(document).ready(function(){
1990
        $("#schema_checked").click(function(){
1991
            if($("#schema_checked").is(':checked')){
1992
                $("#schema_value").removeAttr("disabled");
1993
            } else {
1994
                $("#schema_value").attr("disabled","disabled");
1995
            }
1996
        });
1997
    });
1998
1999
    $(document).ready(function(){
2000
        $("#input-oai").click(function(){
2001
            $(".rdfoptions").attr("disabled","disabled");
2002
            $(".xmloptions").attr("disabled","disabled");
2003
            $("#dc-rdf").hide();
2004
            $("#dc-xml").hide();
2005
        });
2006
    });
2007
2008
    $(document).ready(function(){
2009
        $("#input-srw").click(function(){
2010
            $(".rdfoptions").attr("disabled","disabled");
2011
            $(".xmloptions").attr("disabled","disabled");
2012
            $("#dc-rdf").hide();
2013
            $("#dc-xml").hide();
2014
        });
2015
    });
2016
    //]]>
2017
    </script>
2018
2019
[% END %] [%# End of jqueryDC %]
(-)a/koha-tmpl/opac-tmpl/bootstrap/js/script.js (-1 / +1 lines)
Lines 63-66 $(document).ready(function(){ Link Here
63
            $("#members").removeAttr("style");
63
            $("#members").removeAttr("style");
64
        }
64
        }
65
    });
65
    });
66
});
66
});
(-)a/opac/opac-export.pl (-2 / +34 lines)
Lines 34-39 my $format=$query->param("format")||'utf8'; Link Here
34
my $biblionumber = $query->param("bib")||0;
34
my $biblionumber = $query->param("bib")||0;
35
$biblionumber = int($biblionumber);
35
$biblionumber = int($biblionumber);
36
my ($marc, $error)= ('','');
36
my ($marc, $error)= ('','');
37
my $recommendation = $query->param("recommendation");
38
my $formats = $query->param("formats");
39
my $qualifier = $query->param("qualifier");
40
my $root_element = $query->param("root_element");
41
my $xsischemalocation = $query->param("xsischemalocation");
42
my $resource_url = $query->url(-base => 1) .
43
                   '/cgi-bin/koha/opac-detail.pl?biblionumber=' .
44
                   $biblionumber;
37
45
38
$marc = GetMarcBiblio($biblionumber, 1) if $biblionumber;
46
$marc = GetMarcBiblio($biblionumber, 1) if $biblionumber;
39
if(!$marc) {
47
if(!$marc) {
Lines 61-68 elsif ($format =~ /bibtex/) { Link Here
61
    $format = 'bibtex';
69
    $format = 'bibtex';
62
}
70
}
63
elsif ($format =~ /dc/) {
71
elsif ($format =~ /dc/) {
64
    ($error,$marc) = marc2dcxml($marc,1);
72
    SWITCH:
65
    $format = "dublin-core.xml";
73
        for ($recommendation) {
74
            if (/^simple-dc-rdf/) {
75
                ($error,$marc) = marc2dcxml($marc, $recommendation, 0,
76
                1, undef, undef, $resource_url , $formats);
77
                $format = "dublin-core." . $formats;
78
                last SWITCH; }
79
            if (/^dc-rdf/) {
80
                ($error,$marc) = marc2dcxml($marc, $recommendation, 1,
81
                1, undef, undef, $resource_url, $formats);
82
                $format = "dublin-core." . $formats;
83
                last SWITCH; }
84
            if (/^dc-xml/) {
85
                ($error,$marc) = marc2dcxml($marc, $recommendation, $qualifier,
86
                1, $root_element, $xsischemalocation, undef, undef);
87
                $format = "dublin-core.xml";
88
                last SWITCH; }
89
            if (/^oai-dc/) {
90
                ($error,$marc) = marc2dcxml($marc, $recommendation);
91
                $format = "dublin-core.xml";
92
                last SWITCH; }
93
            if (/^srw_dc/) {
94
                ($error,$marc) = marc2dcxml($marc, $recommendation);
95
                $format = "dublin-core.xml";
96
                last SWITCH; }
97
        }
66
}
98
}
67
elsif ($format =~ /marc8/) {
99
elsif ($format =~ /marc8/) {
68
    ($error,$marc) = changeEncoding($marc,"MARC","MARC21","MARC-8");
100
    ($error,$marc) = changeEncoding($marc,"MARC","MARC21","MARC-8");
(-)a/t/db_dependent/Record.t (-24 / +16 lines)
Lines 46-74 is ($marcxml, $testxml, "testing marc2xml"); Link Here
46
my $marcconvert=marcxml2marc($marcxml);
46
my $marcconvert=marcxml2marc($marcxml);
47
is ($marcconvert->as_xml,$marc->as_xml, "testing xml2marc");
47
is ($marcconvert->as_xml,$marc->as_xml, "testing xml2marc");
48
48
49
my $marcdc=marc2dcxml($marc);
49
my $marcrdf=marc2dcxml($marc, 'dc-rdf', 1,
50
my $test2xml=qq(<?xml version="1.0" encoding="UTF-8"?>
50
                      0, undef, undef, undef, 'rdfxml');
51
<metadata
51
my $test2xml=qq(<?xml version="1.0" encoding="utf-8"?>
52
  xmlns="http://example.org/myapp/"
52
<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/">
53
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
53
</rdf:RDF>
54
  xsi:schemaLocation="http://example.org/myapp/ http://example.org/myapp/schema.xsd"
54
);
55
  xmlns:dc="http://purl.org/dc/elements/1.1/"
55
56
  xmlns:dcterms="http://purl.org/dc/terms/">
56
is ($marcrdf, $test2xml, "testing marc2dcxml with dc-rdf");
57
</metadata>);
57
58
58
my $marcdc=marc2dcxml($marc, 'dc-xml', 0,
59
is ($marcdc, $test2xml, "testing marc2dcxml");
59
                      0, 'metadata', undef, undef, undef);
60
60
my $test3xml=qq(<?xml version="1.0" encoding="utf-8"?>
61
my $marcqualified=marc2dcxml($marc,1);
61
<metadata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dc="http://purl.org/dc/elements/1.1/"/>
62
my $test3xml=qq(<?xml version="1.0" encoding="UTF-8"?>
62
);
63
<metadata
63
64
  xmlns="http://example.org/myapp/"
64
is ($marcdc, $test3xml, "testing marc2dcxml with unqualified dc-xml");
65
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
66
  xsi:schemaLocation="http://example.org/myapp/ http://example.org/myapp/schema.xsd"
67
  xmlns:dc="http://purl.org/dc/elements/1.1/"
68
  xmlns:dcterms="http://purl.org/dc/terms/">
69
</metadata>);
70
71
is ($marcqualified, $test3xml, "testing marcQualified");
72
65
73
my $mods=marc2modsxml($marc);
66
my $mods=marc2modsxml($marc);
74
my $test4xml=qq(<?xml version="1.0" encoding="UTF-8"?>
67
my $test4xml=qq(<?xml version="1.0" encoding="UTF-8"?>
75
- 

Return to bug 13642