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

(-)a/C4/Installer/PerlDependencies.pm (+5 lines)
Lines 762-767 our $PERL_DEPS = { Link Here
762
        'required' => '0',
762
        'required' => '0',
763
        'min_ver'  => '0.614',
763
        'min_ver'  => '0.614',
764
    },
764
    },
765
    'RDF::Trine' => {
766
        'usage'    => 'Core',
767
        'required' => '1',
768
        'min_ver'  => '1.000',
769
    },
765
};
770
};
766
771
767
1;
772
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::Crosswalk::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 220-239 sub marcxml2marc { Link Here
220
220
221
=head2 marc2dcxml - Convert from ISO-2709 to Dublin Core
221
=head2 marc2dcxml - Convert from ISO-2709 to Dublin Core
222
222
223
  my ($error,$dcxml) = marc2dcxml($marc,$qualified);
223
  ($error,$marc) = marc2dcxml($marc, $type, $qualified,
224
                              $entities, $root, $xsi_schemaLocation, $rdf_subject, $rdf_format);
224
225
225
Returns a DublinCore::Record object, will eventually return a Dublin Core scalar
226
Returns a DublinCore::Record object, will eventually return a Dublin Core scalar
226
227
227
FIXME: should return actual XML, not just an object
228
should return actual XML, not just an object (Koha::Crosswalk::DublinCore return an XML)
228
229
229
C<$marc> - an ISO-2709 scalar or MARC::Record object
230
C<$marc> - an ISO-2709 scalar or MARC::Record object
230
231
231
C<$qualified> - specify whether qualified Dublin Core should be used in the input or output [0]
232
C<$type> - the recommendation ( simple-dc-rdf, dc-rdf, dc-xml, oai-dc, srw_dc )
233
234
C<$qualified> - specify whether simple or qualified Dublin Core should be used in output [0 or 1]
235
236
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
237
238
C<$root> root element for XML files
239
240
C<$xsi_schemaLocation> the xsischemaLocation for XML files.
241
242
C<$rdf_subject> Represent the main subject of RDF triples (for Koha the URI of the resource)
243
244
C<$rdf_format> Imply multiple formats for RDF (ntriples, nquads, rdfxml, rdfjson, ntriples-canonical, turtle)
232
245
233
=cut
246
=cut
234
247
235
sub marc2dcxml {
248
sub marc2dcxml {
236
	my ($marc,$qualified) = @_;
249
    my ( $marc, $type, $qualified, $entities, $root, $xsi_schemaLocation, $rdf_subject,
250
        $rdf_format ) = @_;
237
	my $error;
251
	my $error;
238
    # test if it's already a MARC::Record object, if not, make it one
252
    # test if it's already a MARC::Record object, if not, make it one
239
    my $marc_record_obj;
253
    my $marc_record_obj;
Lines 247-270 sub marc2dcxml { Link Here
247
			$error .="\nCreation of MARC::Record object failed: ".$MARC::File::ERROR;
261
			$error .="\nCreation of MARC::Record object failed: ".$MARC::File::ERROR;
248
		}
262
		}
249
	}
263
	}
250
	my $crosswalk = MARC::Crosswalk::DublinCore->new;
264
    my $dcxml;
251
	if ($qualified) {
265
252
		$crosswalk = MARC::Crosswalk::DublinCore->new( qualified => 1 );
266
    SWITCH:
253
	}
267
    for ($type) {
254
	my $dcxml = $crosswalk->as_dublincore($marc_record_obj);
268
        if (/^simple-dc-rdf/) {
255
	my $dcxmlfinal = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
269
            my $objectDC = Koha::Crosswalk::DublinCore->new({
256
	$dcxmlfinal .= "<metadata
270
                type            => 'rdf',
257
  xmlns=\"http://example.org/myapp/\"
271
                qualified       => 0,
258
  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
272
                get_marc_record => $marc,
259
  xsi:schemaLocation=\"http://example.org/myapp/ http://example.org/myapp/schema.xsd\"
273
            });
260
  xmlns:dc=\"http://purl.org/dc/elements/1.1/\"
274
261
  xmlns:dcterms=\"http://purl.org/dc/terms/\">";
275
            $objectDC->get_rdf_data({
262
276
                rdf_subject => $rdf_subject,
263
	foreach my $element ( $dcxml->elements() ) {
277
                rdf_format  => $rdf_format,
264
                $dcxmlfinal.="<"."dc:".$element->name().">".$element->content()."</"."dc:".$element->name().">\n";
278
                entities    => 1,
279
            });
280
            $dcxml = $objectDC->write_rdf();
281
            last SWITCH;
282
        }
283
        if (/^dc-rdf/) {
284
            my $objectDC = Koha::Crosswalk::DublinCore->new({
285
                type            => 'rdf',
286
                qualified       => 1,
287
                get_marc_record => $marc,
288
            });
289
290
            $objectDC->get_rdf_data({
291
                rdf_subject => $rdf_subject,
292
                rdf_format  => $rdf_format,
293
                entities    => 1,
294
            });
295
            $dcxml = $objectDC->write_rdf();
296
            last SWITCH;
297
        }
298
        if (/^dc-xml/) {
299
            my $objectDC = Koha::Crosswalk::DublinCore->new({
300
                type            => 'xml',
301
                qualified       => $qualified,
302
                get_marc_record => $marc,
303
            });
304
305
            $objectDC->get_xml_data({
306
                root               => $root,
307
                xsi_schemaLocation => $xsi_schemaLocation,
308
                entities           => 1,
309
            });
310
            $dcxml = $objectDC->write_xml();
311
            last SWITCH;
312
        }
313
        if (/^oai-dc/) {
314
            my $objectDC = Koha::Crosswalk::DublinCore->new({
315
                type            => 'xml',
316
                qualified       => 0,
317
                get_marc_record => $marc,
318
            });
319
320
            $objectDC->get_xml_data({
321
                root               => 'oai_dc:dc',
322
                xsi_schemaLocation => 'http://www.openarchives.org/OAI/2.0/oai_dc/' .
323
                                      ' http://www.openarchives.org/OAI/2.0/oai_dc.xsd',
324
                entities           => 0,
325
                opt_namespace      => 'oai_dc',
326
                opt_namespace_url  => 'http://www.openarchives.org/OAI/2.0/oai_dc/',
327
            });
328
            $dcxml = $objectDC->write_xml();
329
            last SWITCH;
330
        }
331
        if (/^srw_dc/) {
332
            my $objectDC = Koha::Crosswalk::DublinCore->new({
333
                type            => 'xml',
334
                qualified       => 0,
335
                get_marc_record => $marc,
336
            });
337
338
            $objectDC->get_xml_data({
339
                root               => 'srw_dc:dc',
340
                xsi_schemaLocation => 'info:srw/schema/1/dc-schema' .
341
                                      ' http://www.loc.gov/standards/sru/resources/dc-schema.xsd',
342
                entities           => 0,
343
                opt_namespace      => 'srw_dc',
344
                opt_namespace_url  => 'info:srw/schema/1/dc-schema',
345
            });
346
            $dcxml = $objectDC->write_xml();
347
            last SWITCH;
348
        }
265
    }
349
    }
266
	$dcxmlfinal .= "\n</metadata>";
350
    return ( $error, $dcxml );
267
	return ($error,$dcxmlfinal);
268
}
351
}
269
352
270
=head2 marc2modsxml - Convert from ISO-2709 to MODS
353
=head2 marc2modsxml - Convert from ISO-2709 to MODS
(-)a/Koha/Crosswalk/DublinCore.pm (+1011 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
package Koha::Crosswalk::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::Crosswalk::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::Crosswalk::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::Crosswalk::DublinCore->new({
42
        type => 'xml',
43
        qualified => 0,
44
        get_marc_record => $record});
45
46
  #Qualified DC-XML
47
  my $objectDC = Koha::Crosswalk::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::Crosswalk::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::Crosswalk::DublinCore->new({
87
        type => 'rdf',
88
        qualified => 0,
89
        get_marc_record => $record});
90
91
  #DC-RDF
92
  my $objectDC = Koha::Crosswalk::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::Crosswalk::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::Crosswalk::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::Crosswalk::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 (-4 / +2 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-deep-perl,
102
 libtest-deep-perl,
104
 libtest-harness-perl | perl-modules,
103
 libtest-harness-perl | perl-modules,
105
 libtest-mockmodule-perl,
104
 libtest-mockmodule-perl,
Lines 290-300 Depends: libalgorithm-checkdigits-perl, Link Here
290
 libopenoffice-oodoc-perl,
289
 libopenoffice-oodoc-perl,
291
 libpdf-api2-perl,
290
 libpdf-api2-perl,
292
 libpdf-api2-simple-perl,
291
 libpdf-api2-simple-perl,
293
 libpdf-fromhtml-perl,
294
 libpdf-reuse-barcode-perl,
292
 libpdf-reuse-barcode-perl,
295
 libpdf-reuse-perl,
293
 libpdf-reuse-perl,
296
 libpdf-table-perl,
294
 libpdf-table-perl,
297
 libplack-middleware-reverseproxy-perl,
295
 libplack-middleware-reverseproxy-perl,
296
 librdf-trine-perl,
298
 libscalar-list-utils-perl,
297
 libscalar-list-utils-perl,
299
 libschedule-at-perl,
298
 libschedule-at-perl,
300
 libsms-send-perl,
299
 libsms-send-perl,
Lines 303-309 Depends: libalgorithm-checkdigits-perl, Link Here
303
 libtemplate-perl,
302
 libtemplate-perl,
304
 libtemplate-plugin-htmltotext-perl,
303
 libtemplate-plugin-htmltotext-perl,
305
 libtemplate-plugin-json-escape-perl,
304
 libtemplate-plugin-json-escape-perl,
306
 libtemplate-plugin-stash-perl,
307
 libtest-deep-perl,
305
 libtest-deep-perl,
308
 libtest-harness-perl | perl-modules,
306
 libtest-harness-perl | perl-modules,
309
 libtest-mockmodule-perl,
307
 libtest-mockmodule-perl,
(-)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 217-223 CAN_user_serials_create_subscription ) %] Link Here
217
    <button class="btn btn-small dropdown-toggle" data-toggle="dropdown"><i class="icon-download-alt"></i> Save <span class="caret"></span></button>
217
    <button class="btn btn-small dropdown-toggle" data-toggle="dropdown"><i class="icon-download-alt"></i> Save <span class="caret"></span></button>
218
    <ul class="dropdown-menu">
218
    <ul class="dropdown-menu">
219
        <li><a href="/cgi-bin/koha/catalogue/export.pl?format=bibtex&amp;op=export&amp;bib=[% biblionumber %]">BIBTEX</a></li>
219
        <li><a href="/cgi-bin/koha/catalogue/export.pl?format=bibtex&amp;op=export&amp;bib=[% biblionumber %]">BIBTEX</a></li>
220
        <li><a href="/cgi-bin/koha/catalogue/export.pl?format=dc&amp;op=export&amp;bib=[% biblionumber %]">Dublin Core (XML)</a></li>
220
        <li><a href="#" data-toggle="modal" data-target="#exportModal_">Dublin Core</a></li>
221
        <li><a href="/cgi-bin/koha/catalogue/export.pl?format=marcxml&amp;op=export&amp;bib=[% biblionumber %]">MARCXML</a></li>
221
        <li><a href="/cgi-bin/koha/catalogue/export.pl?format=marcxml&amp;op=export&amp;bib=[% biblionumber %]">MARCXML</a></li>
222
        <li><a href="/cgi-bin/koha/catalogue/export.pl?format=marc8&amp;op=export&amp;bib=[% biblionumber %]">MARC (non-Unicode/MARC-8)</a></li>
222
        <li><a href="/cgi-bin/koha/catalogue/export.pl?format=marc8&amp;op=export&amp;bib=[% biblionumber %]">MARC (non-Unicode/MARC-8)</a></li>
223
        <li><a href="/cgi-bin/koha/catalogue/export.pl?format=utf8&amp;op=export&amp;bib=[% biblionumber %]">MARC (Unicode/UTF-8)</a></li>
223
        <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 304-309 function verify_images() { Link Here
304
304
305
        [% END %]
305
        [% END %]
306
    });
306
    });
307
308
    //JQuery for Dublin Core Modal
309
    $(document).ready(function(){
310
        $("#input-simple").click(function(){
311
            $(".rdfoptions").removeAttr("disabled");
312
            $(".xmloptions").attr("disabled","disabled");
313
            $("#dc-rdf").toggle(true);
314
            $("#dc-xml").hide();
315
        });
316
    });
317
318
    $(document).ready(function(){
319
        $("#input-rdf").click(function(){
320
            $(".rdfoptions").removeAttr("disabled");
321
            $(".xmloptions").attr("disabled","disabled");
322
            $("#dc-rdf").toggle(true);
323
            $("#dc-xml").hide();
324
        });
325
    });
326
327
    $(document).ready(function(){
328
        $("#input-xml").click(function(){
329
            $(".xmloptions").removeAttr("disabled");
330
            $(".rdfoptions").attr("disabled","disabled");
331
                if($("#root_checked").is(':checked')){
332
                    $("#root_value").removeAttr("disabled");
333
                } else {
334
                    $("#root_value").attr("disabled","disabled");
335
                }
336
                if($("#schema_checked").is(':checked')){
337
                    $("#schema_value").removeAttr("disabled");
338
                } else {
339
                    $("#schema_value").attr("disabled","disabled");
340
                }
341
                $("#dc-xml").toggle();
342
                $("#dc-rdf").hide();
343
        });
344
    });
345
346
    $(document).ready(function(){
347
        $("#root_checked").click(function(){
348
            if($("#root_checked").is(':checked')){
349
                $("#root_value").removeAttr("disabled");
350
            } else {
351
                $("#root_value").attr("disabled","disabled");
352
            }
353
        });
354
    });
355
356
    $(document).ready(function(){
357
        $("#schema_checked").click(function(){
358
            if($("#schema_checked").is(':checked')){
359
                $("#schema_value").removeAttr("disabled");
360
            } else {
361
                $("#schema_value").attr("disabled","disabled");
362
            }
363
        });
364
    });
365
366
    $(document).ready(function(){
367
        $("#input-oai").click(function(){
368
            $(".rdfoptions").attr("disabled","disabled");
369
            $(".xmloptions").attr("disabled","disabled");
370
            $("#dc-rdf").hide();
371
            $("#dc-xml").hide();
372
        });
373
    });
374
375
    $(document).ready(function(){
376
        $("#input-srw").click(function(){
377
            $(".rdfoptions").attr("disabled","disabled");
378
            $(".xmloptions").attr("disabled","disabled");
379
            $("#dc-rdf").hide();
380
            $("#dc-xml").hide();
381
        });
382
    });
383
307
//]]>
384
//]]>
308
</script>
385
</script>
309
</head>
386
</head>
Lines 1050-1056 function verify_images() { Link Here
1050
      <th>Save Record</th>   </tr>
1127
      <th>Save Record</th>   </tr>
1051
    <tr><td> Select download format:    <select name="format">
1128
    <tr><td> Select download format:    <select name="format">
1052
        <option value="mods">MODS (XML)</option>
1129
        <option value="mods">MODS (XML)</option>
1053
        <option value="dc">Dublin Core (XML)</option>
1130
        <option data-toggle="modal" data-target="#exportModal_">Dublin Core</option>
1054
        <option value="marcxml">MARCXML</option>
1131
        <option value="marcxml">MARCXML</option>
1055
        <option value="marc8">MARC (non-Unicode/MARC-8)</option>
1132
        <option value="marc8">MARC (non-Unicode/MARC-8)</option>
1056
        <option value="utf8">MARC (Unicode/UTF-8)</option>    </select>
1133
        <option value="utf8">MARC (Unicode/UTF-8)</option>    </select>
Lines 1083-1086 function verify_images() { Link Here
1083
</div>
1160
</div>
1084
[% END %]
1161
[% END %]
1085
</div>
1162
</div>
1163
1164
    <!--Modal for Dublin Core-->
1165
    <div class="modal hide" id="exportModal_" tabindex="-1" role="dialog" aria-labelledby="exportLabelexportModal_" aria-hidden="true">
1166
        <div class="modal-header">
1167
            <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">&times;</button>
1168
            <h3 id="exportLabelexportModal_">Exporting to Dublin Core...</h3>
1169
        </div>
1170
        <!-- Form to recollect data for Dublin Core-->
1171
        <form method="get" action="/cgi-bin/koha/catalogue/export.pl">
1172
        <div class="modal-body">
1173
            <fieldset>
1174
                <input id="input-simple" type="radio" name="recommendation" value="simple-dc-rdf">
1175
                <label class="label_dc" for="input-simple">Simple DC-RDF</label>
1176
                <br>
1177
                <input id="input-rdf" type="radio" name="recommendation" value="dc-rdf" checked>
1178
                <label class="label_dc" for="input-rdf">DC-RDF (Recommended)</label>
1179
                <div id="dc-rdf">
1180
                    <br><b>Output options for RDF</b>
1181
                    <br>DC-RDF is downloadable in &quot;rdfxml&quot; by default (this is according with the
1182
                    <br>recommendation),  but you can download the file in other formats:
1183
                    <br>
1184
                    <input id="rdfxml" class="rdfoptions" type="radio" name="formats" value="rdfxml" checked>
1185
                    <label class="label_dc" for="rdfxml">rdfxml</label>
1186
                    <input id="rdfjson" class="rdfoptions" type="radio" name="formats" value="rdfjson">
1187
                    <label class="label_dc" for="rdfjson">rdfjson</label>
1188
                    <input id="ntriples" class="rdfoptions" type="radio" name="formats" value="ntriples">
1189
                    <label class="label_dc" for="ntriples">ntriples</label>
1190
                    <input id="nquads" class="rdfoptions" type="radio" name="formats" value="nquads">
1191
                    <label class="label_dc" for="nquads">nquads</label>
1192
                    <input id="ntriples_canonical" class="rdfoptions" type="radio" name="formats" value="ntriples-canonical">
1193
                    <label class="label_dc" for="ntriples_canonical">ntriples-canonical</label>
1194
                    <input id="turtle" class="rdfoptions" type="radio" name="formats" value="turtle">
1195
                    <label class="label_dc" for="turtle">turtle</label>
1196
                </div>
1197
                <br>
1198
                <input id="input-xml" type="radio" name="recommendation" value="dc-xml">
1199
                <label class="label_dc" for="input-xml">DC-XML</label>
1200
                <div id="dc-xml">
1201
                    <p><b>Output options for DC-XML</b>
1202
                    <br>
1203
                    <b>Dublin Core level</b></p>
1204
                    <p><input id="simple_dc" class="xmloptions" type="radio" name="qualifier" value="0" checked disabled>
1205
                    <label class="label_dc" for="simple_dc">Simple Dublin Core</label>&nbsp;
1206
                    <input id="qualified_dc" class="xmloptions" type="radio" name="qualifier" value="1" disabled>
1207
                    <label class="label_dc" for="qualified_dc">Qualified Dublin Core</label></p>
1208
                    <b>Other data (Optional)</b>
1209
                    <br>
1210
                    <input id="root_checked" class="xmloptions" type="checkbox" value="root">
1211
                    <label class="label_dc" for="root_checked">Root element: </label>
1212
                    <input id="root_value" class="xmloptions" type="text" name="root_element" value="metadata" disabled>
1213
                    <br>The xsischemaLocation should be filled like:
1214
                    <br>http://example.org/myapp/ http://example.org/myapp/schema.xsd
1215
                    <br>
1216
                    <input id="schema_checked" class="xmloptions" type="checkbox" value="schema" disabled>
1217
                    <label class="label_dc" for="schema_checked">xsischemaLocation: </label>
1218
                    <input id="schema_value" class="xmloptions" type="url" name="xsischemalocation" disabled><br>
1219
                </div>
1220
                <br>
1221
                <input id="input-oai" type="radio" name="recommendation" value="oai-dc">
1222
                <label class="label_dc" for="input-oai">OAI-DC</label>
1223
                <br>
1224
                <input id="input-srw" type="radio" name="recommendation" value="srw_dc">
1225
                <label class="label_dc" for="input-srw">SRW-DC</label>
1226
                <br>
1227
                <div>
1228
                <br>Learn more about DCMI Specifications at: <a href="http://dublincore.org/specifications/">http://dublincore.org/specifications/</a>
1229
                <br>
1230
                </div>
1231
            </fieldset>
1232
        </div>
1233
        <div class="modal-footer">
1234
            <button type="submit" class="btn">Export</button>
1235
            <button class="btn btn-link" data-dismiss="modal" aria-hidden="true">Cancel</button>
1236
        </div>
1237
        <input type="hidden" name="op" value="export" />
1238
        <input type="hidden" name="format" value="dc" />
1239
        <input type="hidden" name="bib" value="[% biblionumber %]" />
1240
        </form>
1241
    </div>
1242
1086
[% INCLUDE 'intranet-bottom.inc' %]
1243
[% 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 1154-1159 Link Here
1154
</div> <!-- / .container-fluid -->
1154
</div> <!-- / .container-fluid -->
1155
</div> <!-- / .main -->
1155
</div> <!-- / .main -->
1156
1156
1157
<!-- Dublin Core Modal Form -->
1158
<div class="modal fade" id="exportModal_" tabindex="-1" role="dialog" aria-labelledby="exportModalLabel" aria-hidden="true">
1159
    <div class="modal-header">
1160
        <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">&times;</button>
1161
        <h3 class="modal-title" id="exportModalLabel">Exporting to Dublin Core...</h3>
1162
    </div>
1163
    <form method="get" action="/cgi-bin/koha/opac-export.pl">
1164
        <div class="modal-body">
1165
            <fieldset id="dc_fieldset">
1166
                <input id="input-simple" type="radio" name="recommendation" value="simple-dc-rdf">
1167
                <label class="label_dc" for="input-simple">Simple DC-RDF</label>
1168
                <br>
1169
                <input id="input-rdf" type="radio" name="recommendation" value="dc-rdf" checked>
1170
                <label class="label_dc" for="input-rdf">DC-RDF (Recommended)</label>
1171
                <div id="dc-rdf">
1172
                    <br><b>Output options for RDF</b>
1173
                    <br>DC-RDF is downloadable in &quot;rdfxml&quot; by default (this is according with the
1174
                    <br>recommendation),  but you can download the file in other formats:
1175
                    <br>
1176
                    <input id="rdfxml" class="rdfoptions" type="radio" name="formats" value="rdfxml" checked>
1177
                    <label class="label_dc" for="rdfxml">rdfxml</label>
1178
                    <input id="rdfjson" class="rdfoptions" type="radio" name="formats" value="rdfjson">
1179
                    <label class="label_dc" for="rdfjson">rdfjson</label>
1180
                    <input id="ntriples" class="rdfoptions" type="radio" name="formats" value="ntriples">
1181
                    <label class="label_dc" for="ntriples">ntriples</label>
1182
                    <input id="nquads" class="rdfoptions" type="radio" name="formats" value="nquads">
1183
                    <label class="label_dc" for="nquads">nquads</label>
1184
                    <input id="ntriples_canonical" class="rdfoptions" type="radio" name="formats" value="ntriples-canonical">
1185
                    <label class="label_dc" for="ntriples_canonical">ntriples-canonical</label>
1186
                    <input id="turtle" class="rdfoptions" type="radio" name="formats" value="turtle">
1187
                    <label class="label_dc" for="turtle">turtle</label>
1188
                </div>
1189
                <br>
1190
                <input id="input-xml" type="radio" name="recommendation" value="dc-xml">
1191
                <label class="label_dc" for="input-xml">DC-XML</label>
1192
                <div id="dc-xml">
1193
                    <p><b>Output options for DC-XML</b>
1194
                    <br>
1195
                    <b>Dublin Core level</b></p>
1196
                    <p><input id="simple_dc" class="xmloptions" type="radio" name="qualifier" value="0" checked disabled>
1197
                    <label class="label_dc" for="simple_dc">Simple Dublin Core</label>&nbsp;
1198
                    <input id="qualified_dc" class="xmloptions" type="radio" name="qualifier" value="1" disabled>
1199
                    <label class="label_dc" for="qualified_dc">Qualified Dublin Core</label></p>
1200
                    <b>Other data (Optional)</b>
1201
                    <br>
1202
                    <input id="root_checked" class="xmloptions" type="checkbox" value="root">
1203
                    <label class="label_dc" for="root_checked">Root element: </label>
1204
                    <input id="root_value" class="xmloptions" type="text" name="root_element" value="metadata" disabled>
1205
                    <br>The xsischemaLocation should be filled like:
1206
                    <br>http://example.org/myapp/ http://example.org/myapp/schema.xsd
1207
                    <br>
1208
                    <input id="schema_checked" class="xmloptions" type="checkbox" value="schema" disabled>
1209
                    <label class="label_dc" for="schema_checked">xsischemaLocation: </label>
1210
                    <input id="schema_value" class="xmloptions" type="url" name="xsischemalocation" disabled><br>
1211
                </div>
1212
                <br>
1213
                <input id="input-oai" type="radio" name="recommendation" value="oai-dc">
1214
                <label class="label_dc" for="input-oai">OAI-DC</label>
1215
                <br>
1216
                <input id="input-srw" type="radio" name="recommendation" value="srw_dc">
1217
                <label class="label_dc" for="input-srw">SRW-DC</label>
1218
                <br>
1219
                <div>
1220
                    <br>Learn more about DCMI Specifications at: <a href="http://dublincore.org/specifications/">http://dublincore.org/specifications/</a>
1221
                    <br>
1222
                </div>
1223
            </fieldset>
1224
        </div>
1225
        <div class="modal-footer">
1226
            <button type="submit" class="btn">Export</button>
1227
            <button class="btn btn-link" data-dismiss="modal" aria-hidden="true">Cancel</button>
1228
        </div>
1229
        <input type="hidden" name="op" value="export" />
1230
        <input type="hidden" name="format" value="dc" />
1231
        <input type="hidden" name="bib" value="[% biblionumber %]" />
1232
    </form>
1233
</div>
1234
1157
[% INCLUDE 'opac-bottom.inc' %]
1235
[% INCLUDE 'opac-bottom.inc' %]
1158
1236
1159
[%# End of template %]
1237
[%# End of template %]
Lines 1857-1860 Link Here
1857
    //]]>
1935
    //]]>
1858
    </script>
1936
    </script>
1859
[% END # / IF OPACPopupAuthorsSearch  %]
1937
[% END # / IF OPACPopupAuthorsSearch  %]
1938
[% PROCESS jqueryDC %]
1860
[% END %]
1939
[% END %]
1940
1941
[% BLOCK jqueryDC %]
1942
    <script type="text/javascript">
1943
    //<![CDATA[
1944
    //JQuery for Dublin Core Modal
1945
    $(document).ready(function(){
1946
        $("#input-simple").click(function(){
1947
            $(".rdfoptions").removeAttr("disabled");
1948
            $(".xmloptions").attr("disabled","disabled");
1949
            $("#dc-rdf").toggle(true);
1950
            $("#dc-xml").hide();
1951
        });
1952
    });
1953
1954
    $(document).ready(function(){
1955
        $("#input-rdf").click(function(){
1956
            $(".rdfoptions").removeAttr("disabled");
1957
            $(".xmloptions").attr("disabled","disabled");
1958
            $("#dc-rdf").toggle(true);
1959
            $("#dc-xml").hide();
1960
        });
1961
    });
1962
1963
    $(document).ready(function(){
1964
        $("#input-xml").click(function(){
1965
            $(".xmloptions").removeAttr("disabled");
1966
            $(".rdfoptions").attr("disabled","disabled");
1967
                if($("#root_checked").is(':checked')){
1968
                    $("#root_value").removeAttr("disabled");
1969
                } else {
1970
                    $("#root_value").attr("disabled","disabled");
1971
                }
1972
                if($("#schema_checked").is(':checked')){
1973
                    $("#schema_value").removeAttr("disabled");
1974
                } else {
1975
                    $("#schema_value").attr("disabled","disabled");
1976
                }
1977
                $("#dc-xml").toggle();
1978
                $("#dc-rdf").hide();
1979
        });
1980
    });
1981
1982
    $(document).ready(function(){
1983
        $("#root_checked").click(function(){
1984
            if($("#root_checked").is(':checked')){
1985
                $("#root_value").removeAttr("disabled");
1986
            } else {
1987
                $("#root_value").attr("disabled","disabled");
1988
            }
1989
        });
1990
    });
1991
1992
    $(document).ready(function(){
1993
        $("#schema_checked").click(function(){
1994
            if($("#schema_checked").is(':checked')){
1995
                $("#schema_value").removeAttr("disabled");
1996
            } else {
1997
                $("#schema_value").attr("disabled","disabled");
1998
            }
1999
        });
2000
    });
2001
2002
    $(document).ready(function(){
2003
        $("#input-oai").click(function(){
2004
            $(".rdfoptions").attr("disabled","disabled");
2005
            $(".xmloptions").attr("disabled","disabled");
2006
            $("#dc-rdf").hide();
2007
            $("#dc-xml").hide();
2008
        });
2009
    });
2010
2011
    $(document).ready(function(){
2012
        $("#input-srw").click(function(){
2013
            $(".rdfoptions").attr("disabled","disabled");
2014
            $(".xmloptions").attr("disabled","disabled");
2015
            $("#dc-rdf").hide();
2016
            $("#dc-xml").hide();
2017
        });
2018
    });
2019
    //]]>
2020
    </script>
2021
2022
[% 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 50-78 is ($marcxml, $testxml, "testing marc2xml"); Link Here
50
my $marcconvert=marcxml2marc($marcxml);
50
my $marcconvert=marcxml2marc($marcxml);
51
is ($marcconvert->as_xml,$marc->as_xml, "testing xml2marc");
51
is ($marcconvert->as_xml,$marc->as_xml, "testing xml2marc");
52
52
53
my $marcdc=marc2dcxml($marc);
53
my $marcrdf=marc2dcxml($marc, 'dc-rdf', 1,
54
my $test2xml=qq(<?xml version="1.0" encoding="UTF-8"?>
54
                      0, undef, undef, undef, 'rdfxml');
55
<metadata
55
my $test2xml=qq(<?xml version="1.0" encoding="utf-8"?>
56
  xmlns="http://example.org/myapp/"
56
<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/">
57
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
57
</rdf:RDF>
58
  xsi:schemaLocation="http://example.org/myapp/ http://example.org/myapp/schema.xsd"
58
);
59
  xmlns:dc="http://purl.org/dc/elements/1.1/"
59
60
  xmlns:dcterms="http://purl.org/dc/terms/">
60
is ($marcrdf, $test2xml, "testing marc2dcxml with dc-rdf");
61
</metadata>);
61
62
62
my $marcdc=marc2dcxml($marc, 'dc-xml', 0,
63
is ($marcdc, $test2xml, "testing marc2dcxml");
63
                      0, 'metadata', undef, undef, undef);
64
64
my $test3xml=qq(<?xml version="1.0" encoding="utf-8"?>
65
my $marcqualified=marc2dcxml($marc,1);
65
<metadata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dc="http://purl.org/dc/elements/1.1/"/>
66
my $test3xml=qq(<?xml version="1.0" encoding="UTF-8"?>
66
);
67
<metadata
67
68
  xmlns="http://example.org/myapp/"
68
is ($marcdc, $test3xml, "testing marc2dcxml with unqualified dc-xml");
69
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
70
  xsi:schemaLocation="http://example.org/myapp/ http://example.org/myapp/schema.xsd"
71
  xmlns:dc="http://purl.org/dc/elements/1.1/"
72
  xmlns:dcterms="http://purl.org/dc/terms/">
73
</metadata>);
74
75
is ($marcqualified, $test3xml, "testing marcQualified");
76
69
77
my $mods=marc2modsxml($marc);
70
my $mods=marc2modsxml($marc);
78
my $test4xml=qq(<?xml version="1.0" encoding="UTF-8"?>
71
my $test4xml=qq(<?xml version="1.0" encoding="UTF-8"?>
79
- 

Return to bug 13642