iiif_print 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE.md +18 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +16 -0
- data/.github/workflows/build-lint-test-action.yaml +4 -5
- data/.gitignore +5 -4
- data/.rubocop.yml +1 -0
- data/.solargraph.yml +19 -0
- data/Gemfile.lock +1025 -0
- data/README.md +98 -9
- data/Rakefile +6 -0
- data/app/actors/iiif_print/actors/cleanup_file_sets_actor_decorator.rb +24 -0
- data/app/actors/iiif_print/actors/file_set_actor_decorator.rb +30 -28
- data/app/controllers/iiif_print/split_pdfs_controller.rb +38 -0
- data/app/helpers/iiif_print/iiif_helper_decorator.rb +32 -0
- data/app/helpers/iiif_print/iiif_print_helper_behavior.rb +23 -0
- data/app/helpers/iiif_print_helper.rb +0 -20
- data/app/indexers/concerns/iiif_print/child_indexer.rb +9 -3
- data/app/indexers/concerns/iiif_print/file_set_indexer.rb +17 -4
- data/app/models/concerns/iiif_print/set_child_flag.rb +9 -0
- data/app/models/concerns/iiif_print/solr/document.rb +14 -0
- data/app/models/iiif_print/iiif_search_decorator.rb +35 -0
- data/app/models/iiif_print/iiif_search_response_decorator.rb +25 -2
- data/app/models/iiif_print/pending_relationship.rb +3 -0
- data/app/presenters/iiif_print/iiif_manifest_presenter_behavior.rb +120 -0
- data/app/presenters/iiif_print/iiif_manifest_presenter_factory_behavior.rb +1 -1
- data/app/presenters/iiif_print/work_show_presenter_decorator.rb +19 -10
- data/app/search_builders/concerns/iiif_print/allinson_flex_fields.rb +15 -0
- data/app/search_builders/concerns/iiif_print/highlight_search_params.rb +2 -1
- data/app/services/iiif_print/derivative_rodeo_service.rb +382 -0
- data/app/services/iiif_print/manifest_builder_service_behavior.rb +88 -31
- data/app/services/iiif_print/pluggable_derivative_service.rb +3 -9
- data/app/views/catalog/_index_header_list_default.html.erb +13 -0
- data/app/views/hyrax/base/_representative_media.html.erb +4 -3
- data/app/views/hyrax/base/iiif_viewers/_universal_viewer.html.erb +1 -1
- data/app/views/hyrax/file_sets/_actions.html.erb +2 -1
- data/app/views/hyrax/file_sets/_show_actions.html.erb +24 -0
- data/config/locales/iiif_print.en.yml +4 -0
- data/config/routes.rb +3 -0
- data/db/migrate/20231110163052_add_model_details_to_iiif_print_pending_relationships.rb +7 -0
- data/docker-compose.yml +2 -2
- data/iiif_print.gemspec +10 -9
- data/lib/generators/iiif_print/install_generator.rb +21 -1
- data/lib/generators/iiif_print/templates/config/initializers/iiif_print.rb +11 -4
- data/lib/generators/iiif_print/templates/helpers/iiif_print_helper.rb +5 -0
- data/lib/iiif_print/base_derivative_service.rb +2 -1
- data/lib/iiif_print/blacklight_iiif_search/annotation_decorator.rb +57 -5
- data/lib/iiif_print/catalog_search_builder.rb +5 -1
- data/lib/iiif_print/configuration.rb +145 -8
- data/lib/iiif_print/data/fileset_helper.rb +1 -1
- data/lib/iiif_print/data/work_derivatives.rb +3 -3
- data/lib/iiif_print/engine.rb +7 -13
- data/lib/iiif_print/errors.rb +18 -0
- data/lib/iiif_print/homepage_search_builder.rb +17 -0
- data/lib/iiif_print/image_tool.rb +12 -8
- data/lib/iiif_print/jobs/child_works_from_pdf_job.rb +74 -33
- data/lib/iiif_print/jobs/create_relationships_job.rb +80 -31
- data/lib/iiif_print/jobs/request_split_pdf_job.rb +31 -0
- data/lib/iiif_print/lineage_service.rb +29 -8
- data/lib/iiif_print/metadata.rb +67 -48
- data/lib/iiif_print/split_pdfs/base_splitter.rb +142 -0
- data/lib/iiif_print/split_pdfs/child_work_creation_from_pdf_service.rb +68 -32
- data/lib/iiif_print/split_pdfs/derivative_rodeo_splitter.rb +166 -0
- data/lib/iiif_print/split_pdfs/destroy_pdf_child_works_service.rb +33 -0
- data/lib/iiif_print/split_pdfs/pages_to_jpgs_splitter.rb +19 -0
- data/lib/iiif_print/split_pdfs/pages_to_pngs_splitter.rb +26 -0
- data/lib/iiif_print/split_pdfs/pages_to_tiffs_splitter.rb +41 -0
- data/lib/iiif_print/split_pdfs/pdf_image_extraction_service.rb +64 -59
- data/lib/iiif_print/text_extraction/hocr_reader.rb +7 -3
- data/lib/iiif_print/text_extraction/page_ocr.rb +5 -4
- data/lib/iiif_print/version.rb +1 -1
- data/lib/iiif_print.rb +167 -12
- data/lib/samvera/derivatives/configuration.rb +83 -0
- data/lib/samvera/derivatives/hyrax.rb +129 -0
- data/lib/samvera/derivatives.rb +238 -0
- data/spec/factories/newspaper_page_solr_document.rb +9 -1
- data/spec/fixtures/authorities/licenses.yml +4 -0
- data/spec/fixtures/authorities/rights_statements.yml +4 -0
- data/spec/iiif_print/base_derivative_service_spec.rb +20 -3
- data/spec/iiif_print/blacklight_iiif_search/annotation_decorator_spec.rb +11 -3
- data/spec/iiif_print/catalog_search_builder_spec.rb +1 -1
- data/spec/iiif_print/configuration_spec.rb +141 -15
- data/spec/iiif_print/jobs/child_works_from_pdf_job_spec.rb +7 -2
- data/spec/iiif_print/jobs/create_relationships_job_spec.rb +110 -9
- data/spec/iiif_print/lineage_service_spec.rb +1 -1
- data/spec/iiif_print/metadata_spec.rb +157 -23
- data/spec/iiif_print/split_pdfs/base_splitter_spec.rb +27 -0
- data/spec/iiif_print/split_pdfs/derivative_rodeo_splitter_spec.rb +80 -0
- data/spec/iiif_print/split_pdfs/destroy_pdf_child_works_service_spec.rb +92 -0
- data/spec/iiif_print/split_pdfs/pages_to_jpgs_splitter_spec.rb +22 -0
- data/spec/iiif_print/split_pdfs/pages_to_pngs_splitter_spec.rb +18 -0
- data/spec/iiif_print/split_pdfs/pages_to_tiffs_splitter_spec.rb +19 -0
- data/spec/iiif_print/text_extraction/hocr_reader_spec.rb +2 -2
- data/spec/iiif_print_spec.rb +125 -5
- data/spec/models/iiif_print/iiif_search_decorator_spec.rb +27 -0
- data/spec/presenters/iiif_print/iiif_manifest_presenter_behavior_spec.rb +51 -0
- data/spec/samvera/derivatives/configuration_spec.rb +41 -0
- data/spec/samvera/derivatives/hyrax_spec.rb +62 -0
- data/spec/samvera/derivatives_spec.rb +54 -0
- data/spec/services/iiif_print/derivative_rodeo_service_spec.rb +103 -0
- data/spec/services/iiif_print/manifest_builder_service_behavior_spec.rb +20 -0
- data/spec/services/iiif_print/pluggable_derivative_service_spec.rb +8 -11
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +1 -1
- data/tasks/copy_authorities_to_test_app.rake +11 -0
- data/tasks/iiif_print_dev.rake +4 -4
- metadata +123 -35
- data/app/helpers/hyrax/iiif_helper.rb +0 -22
- data/lib/iiif_print/split_pdfs/pages_into_images_service.rb +0 -130
- data/spec/iiif_print/split_pdfs/pages_into_images_service_spec.rb +0 -6
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iiif_print
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Upton
|
@@ -14,36 +14,42 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date:
|
17
|
+
date: 2024-05-30 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: blacklight_iiif_search
|
21
21
|
requirement: !ruby/object:Gem::Requirement
|
22
22
|
requirements:
|
23
|
-
- - "
|
23
|
+
- - ">="
|
24
24
|
- !ruby/object:Gem::Version
|
25
25
|
version: '1.0'
|
26
|
+
- - "<"
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '3.0'
|
26
29
|
type: :runtime
|
27
30
|
prerelease: false
|
28
31
|
version_requirements: !ruby/object:Gem::Requirement
|
29
32
|
requirements:
|
30
|
-
- - "
|
33
|
+
- - ">="
|
31
34
|
- !ruby/object:Gem::Version
|
32
35
|
version: '1.0'
|
36
|
+
- - "<"
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '3.0'
|
33
39
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
40
|
+
name: derivative-rodeo
|
35
41
|
requirement: !ruby/object:Gem::Requirement
|
36
42
|
requirements:
|
37
43
|
- - "~>"
|
38
44
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
45
|
+
version: '0.5'
|
40
46
|
type: :runtime
|
41
47
|
prerelease: false
|
42
48
|
version_requirements: !ruby/object:Gem::Requirement
|
43
49
|
requirements:
|
44
50
|
- - "~>"
|
45
51
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
52
|
+
version: '0.5'
|
47
53
|
- !ruby/object:Gem::Dependency
|
48
54
|
name: hyrax
|
49
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,7 +59,7 @@ dependencies:
|
|
53
59
|
version: '2.5'
|
54
60
|
- - "<"
|
55
61
|
- !ruby/object:Gem::Version
|
56
|
-
version: '
|
62
|
+
version: '6'
|
57
63
|
type: :runtime
|
58
64
|
prerelease: false
|
59
65
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -63,7 +69,7 @@ dependencies:
|
|
63
69
|
version: '2.5'
|
64
70
|
- - "<"
|
65
71
|
- !ruby/object:Gem::Version
|
66
|
-
version: '
|
72
|
+
version: '6'
|
67
73
|
- !ruby/object:Gem::Dependency
|
68
74
|
name: nokogiri
|
69
75
|
requirement: !ruby/object:Gem::Requirement
|
@@ -78,20 +84,6 @@ dependencies:
|
|
78
84
|
- - ">="
|
79
85
|
- !ruby/object:Gem::Version
|
80
86
|
version: 1.13.2
|
81
|
-
- !ruby/object:Gem::Dependency
|
82
|
-
name: rails
|
83
|
-
requirement: !ruby/object:Gem::Requirement
|
84
|
-
requirements:
|
85
|
-
- - "~>"
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
version: '5.0'
|
88
|
-
type: :runtime
|
89
|
-
prerelease: false
|
90
|
-
version_requirements: !ruby/object:Gem::Requirement
|
91
|
-
requirements:
|
92
|
-
- - "~>"
|
93
|
-
- !ruby/object:Gem::Version
|
94
|
-
version: '5.0'
|
95
87
|
- !ruby/object:Gem::Dependency
|
96
88
|
name: rdf-vocab
|
97
89
|
requirement: !ruby/object:Gem::Requirement
|
@@ -216,20 +208,34 @@ dependencies:
|
|
216
208
|
- - "~>"
|
217
209
|
- !ruby/object:Gem::Version
|
218
210
|
version: '1'
|
211
|
+
- !ruby/object:Gem::Dependency
|
212
|
+
name: json-canonicalization
|
213
|
+
requirement: !ruby/object:Gem::Requirement
|
214
|
+
requirements:
|
215
|
+
- - '='
|
216
|
+
- !ruby/object:Gem::Version
|
217
|
+
version: 0.3.1
|
218
|
+
type: :development
|
219
|
+
prerelease: false
|
220
|
+
version_requirements: !ruby/object:Gem::Requirement
|
221
|
+
requirements:
|
222
|
+
- - '='
|
223
|
+
- !ruby/object:Gem::Version
|
224
|
+
version: 0.3.1
|
219
225
|
- !ruby/object:Gem::Dependency
|
220
226
|
name: rspec-rails
|
221
227
|
requirement: !ruby/object:Gem::Requirement
|
222
228
|
requirements:
|
223
|
-
- - "
|
229
|
+
- - ">="
|
224
230
|
- !ruby/object:Gem::Version
|
225
|
-
version: '
|
231
|
+
version: '0'
|
226
232
|
type: :development
|
227
233
|
prerelease: false
|
228
234
|
version_requirements: !ruby/object:Gem::Requirement
|
229
235
|
requirements:
|
230
|
-
- - "
|
236
|
+
- - ">="
|
231
237
|
- !ruby/object:Gem::Version
|
232
|
-
version: '
|
238
|
+
version: '0'
|
233
239
|
- !ruby/object:Gem::Dependency
|
234
240
|
name: rspec-activemodel-mocks
|
235
241
|
requirement: !ruby/object:Gem::Requirement
|
@@ -278,6 +284,34 @@ dependencies:
|
|
278
284
|
- - "<"
|
279
285
|
- !ruby/object:Gem::Version
|
280
286
|
version: '3.0'
|
287
|
+
- !ruby/object:Gem::Dependency
|
288
|
+
name: solargraph
|
289
|
+
requirement: !ruby/object:Gem::Requirement
|
290
|
+
requirements:
|
291
|
+
- - ">="
|
292
|
+
- !ruby/object:Gem::Version
|
293
|
+
version: '0'
|
294
|
+
type: :development
|
295
|
+
prerelease: false
|
296
|
+
version_requirements: !ruby/object:Gem::Requirement
|
297
|
+
requirements:
|
298
|
+
- - ">="
|
299
|
+
- !ruby/object:Gem::Version
|
300
|
+
version: '0'
|
301
|
+
- !ruby/object:Gem::Dependency
|
302
|
+
name: yard
|
303
|
+
requirement: !ruby/object:Gem::Requirement
|
304
|
+
requirements:
|
305
|
+
- - ">="
|
306
|
+
- !ruby/object:Gem::Version
|
307
|
+
version: '0'
|
308
|
+
type: :development
|
309
|
+
prerelease: false
|
310
|
+
version_requirements: !ruby/object:Gem::Requirement
|
311
|
+
requirements:
|
312
|
+
- - ">="
|
313
|
+
- !ruby/object:Gem::Version
|
314
|
+
version: '0'
|
281
315
|
description: Gem/Engine for IIIF Print works in Hyrax-based Samvera Application.
|
282
316
|
email:
|
283
317
|
- sean.upton@utah.edu
|
@@ -294,20 +328,25 @@ files:
|
|
294
328
|
- ".coveralls.yml"
|
295
329
|
- ".env"
|
296
330
|
- ".fcrepo_wrapper"
|
331
|
+
- ".github/ISSUE_TEMPLATE.md"
|
332
|
+
- ".github/PULL_REQUEST_TEMPLATE.md"
|
297
333
|
- ".github/release.yml"
|
298
334
|
- ".github/workflows/branches.yml"
|
299
335
|
- ".github/workflows/build-lint-test-action.yaml"
|
300
336
|
- ".github/workflows/release_labels.yml"
|
301
337
|
- ".gitignore"
|
302
338
|
- ".rubocop.yml"
|
339
|
+
- ".solargraph.yml"
|
303
340
|
- ".solr_wrapper"
|
304
341
|
- ".travis.yml"
|
305
342
|
- CONTRIBUTING.md
|
306
343
|
- Dockerfile
|
307
344
|
- Gemfile
|
345
|
+
- Gemfile.lock
|
308
346
|
- LICENSE
|
309
347
|
- README.md
|
310
348
|
- Rakefile
|
349
|
+
- app/actors/iiif_print/actors/cleanup_file_sets_actor_decorator.rb
|
311
350
|
- app/actors/iiif_print/actors/file_set_actor_decorator.rb
|
312
351
|
- app/assets/config/iiif_print_manifest.js
|
313
352
|
- app/assets/images/iiif_print/.keep
|
@@ -319,8 +358,10 @@ files:
|
|
319
358
|
- app/assets/stylesheets/iiif_print/_issues_calendar.scss
|
320
359
|
- app/assets/stylesheets/iiif_print/_newspapers_search.scss
|
321
360
|
- app/assets/stylesheets/iiif_print/_search_results.scss
|
322
|
-
- app/
|
361
|
+
- app/controllers/iiif_print/split_pdfs_controller.rb
|
323
362
|
- app/helpers/iiif_print/application_helper.rb
|
363
|
+
- app/helpers/iiif_print/iiif_helper_decorator.rb
|
364
|
+
- app/helpers/iiif_print/iiif_print_helper_behavior.rb
|
324
365
|
- app/helpers/iiif_print_helper.rb
|
325
366
|
- app/indexers/concerns/iiif_print/child_indexer.rb
|
326
367
|
- app/indexers/concerns/iiif_print/file_set_indexer.rb
|
@@ -329,6 +370,7 @@ files:
|
|
329
370
|
- app/models/concerns/iiif_print/solr/document.rb
|
330
371
|
- app/models/iiif_print/application_record.rb
|
331
372
|
- app/models/iiif_print/derivative_attachment.rb
|
373
|
+
- app/models/iiif_print/iiif_search_decorator.rb
|
332
374
|
- app/models/iiif_print/iiif_search_response_decorator.rb
|
333
375
|
- app/models/iiif_print/ingest_file_relation.rb
|
334
376
|
- app/models/iiif_print/pending_relationship.rb
|
@@ -336,14 +378,18 @@ files:
|
|
336
378
|
- app/presenters/iiif_print/iiif_manifest_presenter_factory_behavior.rb
|
337
379
|
- app/presenters/iiif_print/work_show_presenter_decorator.rb
|
338
380
|
- app/renderers/hyrax/renderers/faceted_attribute_renderer_decorator.rb
|
381
|
+
- app/search_builders/concerns/iiif_print/allinson_flex_fields.rb
|
339
382
|
- app/search_builders/concerns/iiif_print/exclude_models.rb
|
340
383
|
- app/search_builders/concerns/iiif_print/highlight_search_params.rb
|
384
|
+
- app/services/iiif_print/derivative_rodeo_service.rb
|
341
385
|
- app/services/iiif_print/manifest_builder_service_behavior.rb
|
342
386
|
- app/services/iiif_print/pluggable_derivative_service.rb
|
387
|
+
- app/views/catalog/_index_header_list_default.html.erb
|
343
388
|
- app/views/catalog/_snippets_more.html.erb
|
344
389
|
- app/views/hyrax/base/_representative_media.html.erb
|
345
390
|
- app/views/hyrax/base/iiif_viewers/_universal_viewer.html.erb
|
346
391
|
- app/views/hyrax/file_sets/_actions.html.erb
|
392
|
+
- app/views/hyrax/file_sets/_show_actions.html.erb
|
347
393
|
- bin/rails
|
348
394
|
- config/fcrepo_wrapper_test.yml
|
349
395
|
- config/initializers/assets.rb
|
@@ -354,6 +400,7 @@ files:
|
|
354
400
|
- config/locales/iiif_print.it.yml
|
355
401
|
- config/locales/iiif_print.pt-BR.yml
|
356
402
|
- config/locales/iiif_print.zh.yml
|
403
|
+
- config/routes.rb
|
357
404
|
- config/solr_wrapper_test.yml
|
358
405
|
- config/test-fixture/solr-config/_rest_managed.json
|
359
406
|
- config/test-fixture/solr-config/admin-extra.html
|
@@ -376,12 +423,14 @@ files:
|
|
376
423
|
- db/migrate/20181214181358_create_iiif_print_derivative_attachments.rb
|
377
424
|
- db/migrate/20190107165909_create_iiif_print_ingest_file_relations.rb
|
378
425
|
- db/migrate/20230109000000_create_iiif_print_pending_relationships.rb
|
426
|
+
- db/migrate/20231110163052_add_model_details_to_iiif_print_pending_relationships.rb
|
379
427
|
- docker-compose.yml
|
380
428
|
- iiif_print.gemspec
|
381
429
|
- lib/generators/iiif_print/assets_generator.rb
|
382
430
|
- lib/generators/iiif_print/catalog_controller_generator.rb
|
383
431
|
- lib/generators/iiif_print/install_generator.rb
|
384
432
|
- lib/generators/iiif_print/templates/config/initializers/iiif_print.rb
|
433
|
+
- lib/generators/iiif_print/templates/helpers/iiif_print_helper.rb
|
385
434
|
- lib/generators/iiif_print/templates/iiif_print.scss
|
386
435
|
- lib/iiif_print.rb
|
387
436
|
- lib/iiif_print/base_derivative_service.rb
|
@@ -396,17 +445,24 @@ files:
|
|
396
445
|
- lib/iiif_print/data/work_files.rb
|
397
446
|
- lib/iiif_print/engine.rb
|
398
447
|
- lib/iiif_print/errors.rb
|
448
|
+
- lib/iiif_print/homepage_search_builder.rb
|
399
449
|
- lib/iiif_print/image_tool.rb
|
400
450
|
- lib/iiif_print/jobs/application_job.rb
|
401
451
|
- lib/iiif_print/jobs/child_works_from_pdf_job.rb
|
402
452
|
- lib/iiif_print/jobs/create_relationships_job.rb
|
453
|
+
- lib/iiif_print/jobs/request_split_pdf_job.rb
|
403
454
|
- lib/iiif_print/jp2_derivative_service.rb
|
404
455
|
- lib/iiif_print/jp2_image_metadata.rb
|
405
456
|
- lib/iiif_print/lineage_service.rb
|
406
457
|
- lib/iiif_print/metadata.rb
|
407
458
|
- lib/iiif_print/pdf_derivative_service.rb
|
459
|
+
- lib/iiif_print/split_pdfs/base_splitter.rb
|
408
460
|
- lib/iiif_print/split_pdfs/child_work_creation_from_pdf_service.rb
|
409
|
-
- lib/iiif_print/split_pdfs/
|
461
|
+
- lib/iiif_print/split_pdfs/derivative_rodeo_splitter.rb
|
462
|
+
- lib/iiif_print/split_pdfs/destroy_pdf_child_works_service.rb
|
463
|
+
- lib/iiif_print/split_pdfs/pages_to_jpgs_splitter.rb
|
464
|
+
- lib/iiif_print/split_pdfs/pages_to_pngs_splitter.rb
|
465
|
+
- lib/iiif_print/split_pdfs/pages_to_tiffs_splitter.rb
|
410
466
|
- lib/iiif_print/split_pdfs/pdf_image_extraction_service.rb
|
411
467
|
- lib/iiif_print/text_extraction.rb
|
412
468
|
- lib/iiif_print/text_extraction/alto_reader.rb
|
@@ -419,6 +475,9 @@ files:
|
|
419
475
|
- lib/iiif_print/tiff_derivative_service.rb
|
420
476
|
- lib/iiif_print/version.rb
|
421
477
|
- lib/iiif_print/works_controller_behavior.rb
|
478
|
+
- lib/samvera/derivatives.rb
|
479
|
+
- lib/samvera/derivatives/configuration.rb
|
480
|
+
- lib/samvera/derivatives/hyrax.rb
|
422
481
|
- lib/tasks/set_child_works.rake
|
423
482
|
- spec/.keep.txt
|
424
483
|
- spec/factories/ability.rb
|
@@ -429,6 +488,8 @@ files:
|
|
429
488
|
- spec/factories/uploaded_pdf_file.rb
|
430
489
|
- spec/factories/uploaded_txt_file.rb
|
431
490
|
- spec/factories/user.rb
|
491
|
+
- spec/fixtures/authorities/licenses.yml
|
492
|
+
- spec/fixtures/authorities/rights_statements.yml
|
432
493
|
- spec/fixtures/files/4.1.07.jp2
|
433
494
|
- spec/fixtures/files/4.1.07.tiff
|
434
495
|
- spec/fixtures/files/README.md
|
@@ -469,7 +530,12 @@ files:
|
|
469
530
|
- spec/iiif_print/jp2_image_metadata_spec.rb
|
470
531
|
- spec/iiif_print/lineage_service_spec.rb
|
471
532
|
- spec/iiif_print/metadata_spec.rb
|
472
|
-
- spec/iiif_print/split_pdfs/
|
533
|
+
- spec/iiif_print/split_pdfs/base_splitter_spec.rb
|
534
|
+
- spec/iiif_print/split_pdfs/derivative_rodeo_splitter_spec.rb
|
535
|
+
- spec/iiif_print/split_pdfs/destroy_pdf_child_works_service_spec.rb
|
536
|
+
- spec/iiif_print/split_pdfs/pages_to_jpgs_splitter_spec.rb
|
537
|
+
- spec/iiif_print/split_pdfs/pages_to_pngs_splitter_spec.rb
|
538
|
+
- spec/iiif_print/split_pdfs/pages_to_tiffs_splitter_spec.rb
|
473
539
|
- spec/iiif_print/text_extraction/alto_reader_spec.rb
|
474
540
|
- spec/iiif_print/text_extraction/hocr_reader_spec.rb
|
475
541
|
- spec/iiif_print/text_extraction/page_ocr_spec.rb
|
@@ -478,11 +544,17 @@ files:
|
|
478
544
|
- spec/iiif_print_spec.rb
|
479
545
|
- spec/misc_shared.rb
|
480
546
|
- spec/models/iiif_print/derivative_attachment_spec.rb
|
547
|
+
- spec/models/iiif_print/iiif_search_decorator_spec.rb
|
481
548
|
- spec/models/iiif_print/ingest_file_relation_spec.rb
|
482
549
|
- spec/models/solr_document_spec.rb
|
483
550
|
- spec/presenters/iiif_print/iiif_manifest_presenter_behavior_spec.rb
|
484
551
|
- spec/presenters/iiif_print/iiif_manifest_presenter_factory_behavior_spec.rb
|
552
|
+
- spec/samvera/derivatives/configuration_spec.rb
|
553
|
+
- spec/samvera/derivatives/hyrax_spec.rb
|
554
|
+
- spec/samvera/derivatives_spec.rb
|
555
|
+
- spec/services/iiif_print/derivative_rodeo_service_spec.rb
|
485
556
|
- spec/services/iiif_print/jp2_derivative_service_spec.rb
|
557
|
+
- spec/services/iiif_print/manifest_builder_service_behavior_spec.rb
|
486
558
|
- spec/services/iiif_print/pdf_derivative_service_spec.rb
|
487
559
|
- spec/services/iiif_print/pluggable_derivative_service_spec.rb
|
488
560
|
- spec/services/iiif_print/text_extraction_derivative_service_spec.rb
|
@@ -498,9 +570,10 @@ files:
|
|
498
570
|
- spec/test_app_templates/solr.yml
|
499
571
|
- spec/test_app_templates/solr/conf/schema.xml
|
500
572
|
- spec/test_app_templates/solr/conf/solrconfig.xml
|
573
|
+
- tasks/copy_authorities_to_test_app.rake
|
501
574
|
- tasks/iiif_print_dev.rake
|
502
575
|
- tmp/.keep
|
503
|
-
homepage: https://github.com/
|
576
|
+
homepage: https://github.com/scientist-softserv/iiif_print/
|
504
577
|
licenses:
|
505
578
|
- Apache-2.0
|
506
579
|
metadata: {}
|
@@ -519,11 +592,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
519
592
|
- !ruby/object:Gem::Version
|
520
593
|
version: '0'
|
521
594
|
requirements: []
|
522
|
-
rubygems_version: 3.
|
595
|
+
rubygems_version: 3.2.3
|
523
596
|
signing_key:
|
524
597
|
specification_version: 4
|
525
|
-
summary:
|
526
|
-
to
|
598
|
+
summary: IiifPrint is a gem (Rails "engine") for Hyrax-based digital repository applications
|
599
|
+
to support displaying parent/child works in the same viewer (Universal Viewer) and
|
600
|
+
the ability to search OCR from the parent work to the child work(s). IiifPring was
|
601
|
+
originally based off of the samvera-labs Newspaper gem.
|
527
602
|
test_files:
|
528
603
|
- spec/.keep.txt
|
529
604
|
- spec/factories/ability.rb
|
@@ -534,6 +609,8 @@ test_files:
|
|
534
609
|
- spec/factories/uploaded_pdf_file.rb
|
535
610
|
- spec/factories/uploaded_txt_file.rb
|
536
611
|
- spec/factories/user.rb
|
612
|
+
- spec/fixtures/authorities/licenses.yml
|
613
|
+
- spec/fixtures/authorities/rights_statements.yml
|
537
614
|
- spec/fixtures/files/4.1.07.jp2
|
538
615
|
- spec/fixtures/files/4.1.07.tiff
|
539
616
|
- spec/fixtures/files/README.md
|
@@ -574,7 +651,12 @@ test_files:
|
|
574
651
|
- spec/iiif_print/jp2_image_metadata_spec.rb
|
575
652
|
- spec/iiif_print/lineage_service_spec.rb
|
576
653
|
- spec/iiif_print/metadata_spec.rb
|
577
|
-
- spec/iiif_print/split_pdfs/
|
654
|
+
- spec/iiif_print/split_pdfs/base_splitter_spec.rb
|
655
|
+
- spec/iiif_print/split_pdfs/derivative_rodeo_splitter_spec.rb
|
656
|
+
- spec/iiif_print/split_pdfs/destroy_pdf_child_works_service_spec.rb
|
657
|
+
- spec/iiif_print/split_pdfs/pages_to_jpgs_splitter_spec.rb
|
658
|
+
- spec/iiif_print/split_pdfs/pages_to_pngs_splitter_spec.rb
|
659
|
+
- spec/iiif_print/split_pdfs/pages_to_tiffs_splitter_spec.rb
|
578
660
|
- spec/iiif_print/text_extraction/alto_reader_spec.rb
|
579
661
|
- spec/iiif_print/text_extraction/hocr_reader_spec.rb
|
580
662
|
- spec/iiif_print/text_extraction/page_ocr_spec.rb
|
@@ -583,11 +665,17 @@ test_files:
|
|
583
665
|
- spec/iiif_print_spec.rb
|
584
666
|
- spec/misc_shared.rb
|
585
667
|
- spec/models/iiif_print/derivative_attachment_spec.rb
|
668
|
+
- spec/models/iiif_print/iiif_search_decorator_spec.rb
|
586
669
|
- spec/models/iiif_print/ingest_file_relation_spec.rb
|
587
670
|
- spec/models/solr_document_spec.rb
|
588
671
|
- spec/presenters/iiif_print/iiif_manifest_presenter_behavior_spec.rb
|
589
672
|
- spec/presenters/iiif_print/iiif_manifest_presenter_factory_behavior_spec.rb
|
673
|
+
- spec/samvera/derivatives/configuration_spec.rb
|
674
|
+
- spec/samvera/derivatives/hyrax_spec.rb
|
675
|
+
- spec/samvera/derivatives_spec.rb
|
676
|
+
- spec/services/iiif_print/derivative_rodeo_service_spec.rb
|
590
677
|
- spec/services/iiif_print/jp2_derivative_service_spec.rb
|
678
|
+
- spec/services/iiif_print/manifest_builder_service_behavior_spec.rb
|
591
679
|
- spec/services/iiif_print/pdf_derivative_service_spec.rb
|
592
680
|
- spec/services/iiif_print/pluggable_derivative_service_spec.rb
|
593
681
|
- spec/services/iiif_print/text_extraction_derivative_service_spec.rb
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Hyrax
|
4
|
-
module IiifHelper
|
5
|
-
def iiif_viewer_display(work_presenter, locals = {})
|
6
|
-
render iiif_viewer_display_partial(work_presenter),
|
7
|
-
locals.merge(presenter: work_presenter)
|
8
|
-
end
|
9
|
-
|
10
|
-
def iiif_viewer_display_partial(work_presenter)
|
11
|
-
'hyrax/base/iiif_viewers/' + work_presenter.iiif_viewer.to_s
|
12
|
-
end
|
13
|
-
|
14
|
-
def universal_viewer_base_url
|
15
|
-
"#{request&.base_url}/uv/uv.html"
|
16
|
-
end
|
17
|
-
|
18
|
-
def universal_viewer_config_url
|
19
|
-
"#{request&.base_url}/uv/uv-config.json"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,130 +0,0 @@
|
|
1
|
-
require 'open3'
|
2
|
-
require 'securerandom'
|
3
|
-
require 'tmpdir'
|
4
|
-
require 'iiif_print/split_pdfs/pdf_image_extraction_service'
|
5
|
-
|
6
|
-
module IiifPrint
|
7
|
-
module SplitPdfs
|
8
|
-
class PagesIntoImagesService
|
9
|
-
include Enumerable
|
10
|
-
|
11
|
-
def initialize(path)
|
12
|
-
@baseid = SecureRandom.uuid
|
13
|
-
@pdfpath = path
|
14
|
-
@info = nil
|
15
|
-
@entries = nil
|
16
|
-
@tmpdir = nil
|
17
|
-
@size = nil
|
18
|
-
@pagecount = nil
|
19
|
-
@pdftext = nil
|
20
|
-
@compression = 'lzw'
|
21
|
-
end
|
22
|
-
|
23
|
-
# return
|
24
|
-
def pdfinfo
|
25
|
-
@info = IiifPrint::SplitPdfs::PdfImageExtractionService.new(@pdfpath) if @info.nil?
|
26
|
-
@info
|
27
|
-
end
|
28
|
-
|
29
|
-
# TODO: put this test somewhere to prevent invalid pdfs from crashing the image service.
|
30
|
-
def invalid_pdf?
|
31
|
-
return true if pdfinfo.color.include?(nil) || pdfinfo.width.nil? || pdfinfo.height.nil? || pdfinfo.entries.length.zero?
|
32
|
-
false
|
33
|
-
end
|
34
|
-
|
35
|
-
def tmpdir
|
36
|
-
@tmpdir = Dir.mktmpdir if @tmpdir.nil?
|
37
|
-
@tmpdir
|
38
|
-
end
|
39
|
-
|
40
|
-
def colordevice(channels, bpc)
|
41
|
-
bits = bpc * channels
|
42
|
-
# will be either 8bpc/16bpd color TIFF,
|
43
|
-
# with any CMYK source transformed to 8bpc RBG
|
44
|
-
bits = 24 unless [24, 48].include? bits
|
45
|
-
"tiff#{bits}nc"
|
46
|
-
end
|
47
|
-
|
48
|
-
def gsdevice
|
49
|
-
color, channels, bpc = pdfinfo.color
|
50
|
-
device = nil
|
51
|
-
# CCITT Group 4 Black and White, if applicable:
|
52
|
-
if color == 'gray' && bpc == 1
|
53
|
-
device = 'tiffg4'
|
54
|
-
@compression = 'g4'
|
55
|
-
end
|
56
|
-
# 8 Bit Grayscale, if applicable:
|
57
|
-
device = 'tiffgray' if color == 'gray' && bpc > 1
|
58
|
-
# otherwise color:
|
59
|
-
device = colordevice(channels, bpc) if device.nil?
|
60
|
-
device
|
61
|
-
end
|
62
|
-
|
63
|
-
# TODO: this method came from newspaper gem but appears to be unused. Is it needed anywhere?
|
64
|
-
# def gstext
|
65
|
-
# cmd = "gs -q -dNOPAUSE -dBATCH -sDEVICE=txtwrite " \
|
66
|
-
# "-sOutputFile=- -f #{@pdfpath}"
|
67
|
-
# Open3.popen3(cmd) do |_stdin, stdout, _stderr, _wait_thr|
|
68
|
-
# @pdftext = stdout.read
|
69
|
-
# end
|
70
|
-
# @pdftext
|
71
|
-
# end
|
72
|
-
|
73
|
-
def pagecount
|
74
|
-
cmd = "pdfinfo #{@pdfpath}"
|
75
|
-
Open3.popen3(cmd) do |_stdin, stdout, _stderr, _wait_thr|
|
76
|
-
output = stdout.read.split("\n")
|
77
|
-
# rubocop:disable Performance/Detect
|
78
|
-
pages_e = output.select { |e| e.start_with?('Pages:') }[0]
|
79
|
-
# rubocop:enable Performance/Detect
|
80
|
-
@pagecount = pages_e.split[-1].to_i
|
81
|
-
end
|
82
|
-
@pagecount
|
83
|
-
end
|
84
|
-
|
85
|
-
def looks_scanned
|
86
|
-
max_image_px = pdfinfo.width * pdfinfo.height
|
87
|
-
single_image_per_page = pdfinfo.entries.length == pagecount
|
88
|
-
# single 10mp+ image per page?
|
89
|
-
single_image_per_page && max_image_px > 1024 * 1024 * 10
|
90
|
-
end
|
91
|
-
|
92
|
-
def ppi
|
93
|
-
unless looks_scanned
|
94
|
-
# 400 dpi for something that does not look like scanned media:
|
95
|
-
return 400
|
96
|
-
end
|
97
|
-
# For scanned media, defer to detected image PPI:
|
98
|
-
pdfinfo.ppi
|
99
|
-
end
|
100
|
-
|
101
|
-
# ghostscript convert all pages to TIFF
|
102
|
-
def gsconvert
|
103
|
-
output_base = File.join(tmpdir, "#{@baseid}-page%d.tiff")
|
104
|
-
cmd = "gs -dNOPAUSE -dBATCH -sDEVICE=#{gsdevice} " \
|
105
|
-
"-dTextAlphaBits=4 -sCompression=#{@compression} " \
|
106
|
-
"-sOutputFile=#{output_base} -r#{ppi} -f #{@pdfpath}"
|
107
|
-
Open3.popen3(cmd) do |_stdin, stdout, _stderr, _wait_thr|
|
108
|
-
output = stdout.read.split("\n")
|
109
|
-
# rubocop:disable Performance/Count
|
110
|
-
@size = output.select { |e| e.start_with?('Page ') }.length
|
111
|
-
# rubocop:enable Performance/Count
|
112
|
-
end
|
113
|
-
# Return an array of expected filenames
|
114
|
-
(1..@size).map { |n| File.join(tmpdir, "#{@baseid}-page#{n}.tiff") }
|
115
|
-
end
|
116
|
-
|
117
|
-
# entries for each page
|
118
|
-
def entries
|
119
|
-
@entries = gsconvert if @entries.nil?
|
120
|
-
@entries
|
121
|
-
end
|
122
|
-
|
123
|
-
def each
|
124
|
-
entries.each do |e|
|
125
|
-
yield(e)
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|