iiif_print 2.0.1 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +103 -143
- data/app/actors/iiif_print/actors/cleanup_file_sets_actor_decorator.rb +1 -0
- data/app/actors/iiif_print/actors/file_set_actor_decorator.rb +1 -0
- data/app/helpers/iiif_print/iiif_helper_decorator.rb +1 -0
- data/app/indexers/concerns/iiif_print/child_work_indexer_decorator.rb +45 -0
- data/app/indexers/concerns/iiif_print/{file_set_indexer.rb → file_set_indexer_decorator.rb} +15 -1
- data/app/jobs/iiif_print/jobs/child_works_from_pdf_job.rb +8 -2
- data/app/listeners/iiif_print/listener.rb +1 -1
- data/app/models/concerns/iiif_print/solr_document_decorator.rb +47 -0
- data/app/models/iiif_print/iiif_search_decorator.rb +1 -0
- data/app/models/iiif_print/iiif_search_response_decorator.rb +1 -0
- data/app/presenters/iiif_print/file_set_presenter_decorator.rb +1 -0
- data/app/presenters/iiif_print/{iiif_manifest_presenter_behavior.rb → iiif_manifest_presenter/display_image_presenter_decorator.rb} +4 -32
- data/app/presenters/iiif_print/iiif_manifest_presenter_decorator.rb +35 -0
- data/app/presenters/iiif_print/{iiif_manifest_presenter_factory_behavior.rb → iiif_manifest_presenter_factory_decorator.rb} +2 -1
- data/app/renderers/hyrax/renderers/faceted_attribute_renderer_decorator.rb +1 -0
- data/app/services/iiif_print/derivative_rodeo_service.rb +1 -1
- data/app/services/iiif_print/{manifest_builder_service_behavior.rb → manifest_builder_service_decorator.rb} +2 -1
- data/app/services/iiif_print/simple_schema_loader_decorator.rb +1 -0
- data/app/transactions/hyrax/transactions/steps/delete_all_file_sets_decorator.rb +2 -0
- data/config/metadata/child_works_from_pdf_splitting.yaml +6 -0
- data/lib/iiif_print/base_derivative_service.rb +1 -1
- data/lib/iiif_print/blacklight_iiif_search/annotation_decorator.rb +1 -0
- data/lib/iiif_print/configuration.rb +1 -1
- data/lib/iiif_print/data/fileset_helper.rb +1 -1
- data/lib/iiif_print/engine.rb +6 -53
- data/lib/iiif_print/text_extraction_derivative_service.rb +4 -1
- data/lib/iiif_print/version.rb +1 -1
- data/lib/iiif_print/works_controller_behavior_decorator.rb +13 -0
- data/lib/iiif_print.rb +0 -2
- metadata +11 -11
- data/app/indexers/concerns/iiif_print/child_work_indexer.rb +0 -27
- data/app/models/concerns/iiif_print/solr/document.rb +0 -63
- data/config/initializers/simple_schema_loader.rb +0 -1
- data/lib/iiif_print/works_controller_behavior.rb +0 -9
@@ -87,7 +87,7 @@ module IiifPrint
|
|
87
87
|
)
|
88
88
|
BatchCreateJob.perform_later(user,
|
89
89
|
@child_work_titles,
|
90
|
-
|
90
|
+
@resource_types,
|
91
91
|
@uploaded_files,
|
92
92
|
attributes.merge!(model: child_model.to_s, split_from_pdf_id: @split_from_pdf_id).with_indifferent_access,
|
93
93
|
operation)
|
@@ -99,6 +99,7 @@ module IiifPrint
|
|
99
99
|
def prepare_import_data(original_pdf_path, image_files, user)
|
100
100
|
@uploaded_files = []
|
101
101
|
@child_work_titles = {}
|
102
|
+
@resource_types = {}
|
102
103
|
number_of_pages_in_pdf = image_files.size
|
103
104
|
image_files.each_with_index do |image_path, page_number|
|
104
105
|
file_id = create_uploaded_file(user, image_path).to_s
|
@@ -111,6 +112,7 @@ module IiifPrint
|
|
111
112
|
page_padding: number_of_digits(nbr: number_of_pages_in_pdf)
|
112
113
|
)
|
113
114
|
|
115
|
+
@resource_types[file_id] = resource_types
|
114
116
|
@uploaded_files << file_id
|
115
117
|
@child_work_titles[file_id] = child_title
|
116
118
|
# save child work info to create the member relationships
|
@@ -144,10 +146,14 @@ module IiifPrint
|
|
144
146
|
uf.id
|
145
147
|
end
|
146
148
|
|
147
|
-
# TODO: what attributes do we need to fill in from the parent work? What about AllinsonFlex?
|
148
149
|
def attributes
|
149
150
|
IiifPrint.config.child_work_attributes_function.call(parent_work: @parent_work, admin_set_id: @child_admin_set_id)
|
150
151
|
end
|
152
|
+
|
153
|
+
# TODO: Does this method need to be configurable?
|
154
|
+
def resource_types
|
155
|
+
@parent_work.try(:resource_type)
|
156
|
+
end
|
151
157
|
end
|
152
158
|
end
|
153
159
|
end
|
@@ -15,7 +15,7 @@ module IiifPrint
|
|
15
15
|
file_set = event[:file_set]
|
16
16
|
return false unless file_set
|
17
17
|
return false unless file_set.file_set?
|
18
|
-
return false unless file_set.original_file
|
18
|
+
return false unless file_set.original_file&.pdf?
|
19
19
|
|
20
20
|
work = IiifPrint.parent_for(file_set)
|
21
21
|
# A short-circuit to avoid fetching the underlying file.
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module IiifPrint
|
4
|
+
module SolrDocumentDecorator
|
5
|
+
def digest_sha1
|
6
|
+
digest[/urn:sha1:([\w]+)/, 1]
|
7
|
+
end
|
8
|
+
|
9
|
+
def method_missing(method_name, *args, &block)
|
10
|
+
super unless iiif_print_solr_field_names.include? method_name.to_s
|
11
|
+
self[IiifPrint.solr_name(method_name.to_s)]
|
12
|
+
end
|
13
|
+
|
14
|
+
def respond_to_missing?(method_name, include_private = false)
|
15
|
+
iiif_print_solr_field_names.include?(method_name.to_s) || super
|
16
|
+
end
|
17
|
+
|
18
|
+
# @see https://github.com/samvera/hyrax/commit/7108409c619cd2ba4ae8c836b9f3b429a7e9837b
|
19
|
+
def file_set_ids
|
20
|
+
# Yes, this looks a little odd. But the truth is the prior key (e.g. `file_set_ids_ssim`) was
|
21
|
+
# an alias of `member_ids_ssim`.
|
22
|
+
self['member_ids_ssim']
|
23
|
+
end
|
24
|
+
|
25
|
+
def any_highlighting?
|
26
|
+
response&.[]('highlighting')&.[](id)&.present?
|
27
|
+
end
|
28
|
+
|
29
|
+
def solr_document
|
30
|
+
self
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
SolrDocument.prepend(IiifPrint::SolrDocumentDecorator)
|
36
|
+
SolrDocument.attribute :is_child, Hyrax::SolrDocument::Metadata::Solr::String, 'is_child_bsi'
|
37
|
+
SolrDocument.attribute :split_from_pdf_id, Hyrax::SolrDocument::Metadata::Solr::String, 'split_from_pdf_id_ssi'
|
38
|
+
SolrDocument.attribute :digest, Hyrax::SolrDocument::Metadata::Solr::String, 'digest_ssim'
|
39
|
+
|
40
|
+
# @note These properties came from the newspaper_works gem. They are configurable.
|
41
|
+
SolrDocument.class_attribute :iiif_print_solr_field_names, default: %w[alternative_title genre
|
42
|
+
issn lccn oclcnum held_by text_direction
|
43
|
+
page_number section author photographer
|
44
|
+
volume issue_number geographic_coverage
|
45
|
+
extent publication_date height width
|
46
|
+
edition_number edition_name frequency preceded_by
|
47
|
+
succeeded_by]
|
@@ -1,38 +1,9 @@
|
|
1
1
|
# mixin to provide URL for IIIF Content Search service
|
2
2
|
module IiifPrint
|
3
|
-
module
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
# Extending the presenter to the base url which includes the protocol.
|
7
|
-
# We need the base url to render the facet links and normalize the interface.
|
8
|
-
attr_accessor :base_url
|
9
|
-
|
10
|
-
def manifest_metadata
|
11
|
-
# ensure we are using a SolrDocument
|
12
|
-
@manifest_metadata ||= IiifPrint.manifest_metadata_from(work: model.solr_document, presenter: self)
|
13
|
-
end
|
14
|
-
|
15
|
-
def search_service
|
16
|
-
Rails.application.routes.url_helpers.solr_document_iiif_search_url(id, host: hostname)
|
17
|
-
end
|
18
|
-
|
19
|
-
# OVERRIDE: Hyrax 3x, avoid nil returning to IIIF Manifest gem
|
20
|
-
# @see https://github.com/samvera/iiif_manifest/blob/c408f90eba11bef908796c7236ba6bcf8d687acc/lib/iiif_manifest/v3/manifest_builder/record_property_builder.rb#L28
|
21
|
-
##
|
22
|
-
# @return [Array<Hash{String => String}>]
|
23
|
-
def sequence_rendering
|
24
|
-
Array(try(:rendering_ids)).map do |file_set_id|
|
25
|
-
rendering = file_set_presenters.find { |p| p.id == file_set_id }
|
26
|
-
return [] unless rendering
|
27
|
-
|
28
|
-
{ '@id' => Hyrax::Engine.routes.url_helpers.download_url(rendering.id, host: hostname),
|
29
|
-
'format' => rendering.mime_type.presence || I18n.t("hyrax.manifest.unknown_mime_text"),
|
30
|
-
'label' => I18n.t("hyrax.manifest.download_text") + (rendering.label || '') }
|
31
|
-
end.flatten
|
32
|
-
end
|
33
|
-
|
3
|
+
module IiifManifestPresenter
|
34
4
|
# OVERRIDE: Hyrax v3.x
|
35
|
-
module
|
5
|
+
module DisplayImagePresenterDecorator
|
6
|
+
extend ActiveSupport::Concern
|
36
7
|
# Extending the presenter to the base url which includes the protocol.
|
37
8
|
# We need the base url to render the facet links and normalize the interface.
|
38
9
|
attr_accessor :base_url
|
@@ -128,3 +99,4 @@ module IiifPrint
|
|
128
99
|
end
|
129
100
|
end
|
130
101
|
end
|
102
|
+
Hyrax::IiifManifestPresenter::DisplayImagePresenter.prepend(IiifPrint::IiifManifestPresenter::DisplayImagePresenterDecorator)
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# mixin to provide URL for IIIF Content Search service
|
2
|
+
module IiifPrint
|
3
|
+
module IiifManifestPresenterDecorator
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
# Extending the presenter to the base url which includes the protocol.
|
7
|
+
# We need the base url to render the facet links and normalize the interface.
|
8
|
+
attr_accessor :base_url
|
9
|
+
|
10
|
+
def manifest_metadata
|
11
|
+
# ensure we are using a SolrDocument
|
12
|
+
@manifest_metadata ||= IiifPrint.manifest_metadata_from(work: model.solr_document, presenter: self)
|
13
|
+
end
|
14
|
+
|
15
|
+
def search_service
|
16
|
+
Rails.application.routes.url_helpers.solr_document_iiif_search_url(id, host: hostname)
|
17
|
+
end
|
18
|
+
|
19
|
+
# OVERRIDE: Hyrax 3x, avoid nil returning to IIIF Manifest gem
|
20
|
+
# @see https://github.com/samvera/iiif_manifest/blob/c408f90eba11bef908796c7236ba6bcf8d687acc/lib/iiif_manifest/v3/manifest_builder/record_property_builder.rb#L28
|
21
|
+
##
|
22
|
+
# @return [Array<Hash{String => String}>]
|
23
|
+
def sequence_rendering
|
24
|
+
Array(try(:rendering_ids)).map do |file_set_id|
|
25
|
+
rendering = file_set_presenters.find { |p| p.id == file_set_id }
|
26
|
+
return [] unless rendering
|
27
|
+
|
28
|
+
{ '@id' => Hyrax::Engine.routes.url_helpers.download_url(rendering.id, host: hostname),
|
29
|
+
'format' => rendering.mime_type.presence || I18n.t("hyrax.manifest.unknown_mime_text"),
|
30
|
+
'label' => I18n.t("hyrax.manifest.download_text") + (rendering.label || '') }
|
31
|
+
end.flatten
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
Hyrax::IiifManifestPresenter.prepend(IiifPrint::IiifManifestPresenterDecorator)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module IiifPrint
|
2
|
-
module
|
2
|
+
module IiifManifestPresenterFactoryDecorator
|
3
3
|
# This will override Hyrax::IiifManifestPresenter::Factory#build and introducing
|
4
4
|
# the expected behavior:
|
5
5
|
# - child work images show as canvases in the parent work manifest
|
@@ -31,3 +31,4 @@ module IiifPrint
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
34
|
+
Hyrax::IiifManifestPresenter::Factory.prepend(IiifPrint::IiifManifestPresenterFactoryDecorator)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module IiifPrint
|
2
2
|
# rubocop:disable Metrics/ModuleLength
|
3
|
-
module
|
3
|
+
module ManifestBuilderServiceDecorator
|
4
4
|
def initialize(*args,
|
5
5
|
version: IiifPrint.config.default_iiif_manifest_version,
|
6
6
|
iiif_manifest_factory: iiif_manifest_factory_for(version),
|
@@ -154,3 +154,4 @@ module IiifPrint
|
|
154
154
|
end
|
155
155
|
# rubocop:enable Metrics/ClassLength
|
156
156
|
end
|
157
|
+
Hyrax::ManifestBuilderService.prepend(IiifPrint::ManifestBuilderServiceDecorator)
|
@@ -4,6 +4,11 @@ attributes:
|
|
4
4
|
multiple: false
|
5
5
|
index_keys:
|
6
6
|
- "is_child_bsi"
|
7
|
+
form:
|
8
|
+
display: false
|
9
|
+
required: false
|
10
|
+
primary: false
|
11
|
+
multiple: false
|
7
12
|
predicate: "http://id.loc.gov/vocabulary/identifiers/isChild"
|
8
13
|
split_from_pdf_id:
|
9
14
|
type: string
|
@@ -11,6 +16,7 @@ attributes:
|
|
11
16
|
index_keys:
|
12
17
|
- "split_from_pdf_id_ssi"
|
13
18
|
form:
|
19
|
+
display: false
|
14
20
|
required: false
|
15
21
|
primary: false
|
16
22
|
multiple: false
|
@@ -33,7 +33,7 @@ module IiifPrint
|
|
33
33
|
# @TODO: verify if this works for ActiveFedora and if so, remove commented code.
|
34
34
|
# If not, modify to use adapter.
|
35
35
|
# file_set.class.image_mime_types.include?(file_set.mime_type)
|
36
|
-
file_set.original_file
|
36
|
+
file_set.original_file&.image?
|
37
37
|
end
|
38
38
|
|
39
39
|
def derivative_path_factory
|
@@ -212,7 +212,7 @@ module IiifPrint
|
|
212
212
|
visibility: 'lease',
|
213
213
|
visibility_after_lease: lease.visibility_after_lease,
|
214
214
|
visibility_during_lease: lease.visibility_during_lease,
|
215
|
-
lease_release_date: lease.
|
215
|
+
lease_release_date: lease.lease_expiration_date
|
216
216
|
}
|
217
217
|
else
|
218
218
|
visibility_params = { visibility: parent_work.visibility.to_s }
|
@@ -13,7 +13,7 @@ module IiifPrint
|
|
13
13
|
def first_fileset
|
14
14
|
# if context is fileset id (e.g. caller is view partial) string,
|
15
15
|
# get the fileset from that id
|
16
|
-
return
|
16
|
+
return Hyrax.query_service.find_by(id: @work) if @work.is_a?(String)
|
17
17
|
# if "work" context is a FileSet, not actual work, return it
|
18
18
|
return @work if @work.is_a?(Hyrax::FileSet) || @work.is_a?(FileSet)
|
19
19
|
# in most cases, get from work's members:
|
data/lib/iiif_print/engine.rb
CHANGED
@@ -48,55 +48,14 @@ module IiifPrint
|
|
48
48
|
|
49
49
|
Hyrax.publisher.subscribe(IiifPrint::Listener.new) if Hyrax.respond_to?(:publisher)
|
50
50
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
Hyrax::Renderers::FacetedAttributeRenderer.prepend(Hyrax::Renderers::FacetedAttributeRendererDecorator)
|
55
|
-
Hyrax::WorksControllerBehavior.prepend(IiifPrint::WorksControllerBehaviorDecorator)
|
56
|
-
"Hyrax::Transactions::Steps::DeleteAllFileSets".safe_constantize&.prepend(Hyrax::Transactions::Steps::DeleteAllFileSetsDecorator)
|
57
|
-
# Hyku::WorksControllerBehavior was introduced in Hyku v6.0.0+. Yes we don't depend on Hyku,
|
58
|
-
# but this allows us to do minimal Hyku antics with IiifPrint.
|
59
|
-
'Hyku::WorksControllerBehavior'.safe_constantize&.prepend(IiifPrint::WorksControllerBehaviorDecorator)
|
60
|
-
|
61
|
-
Hyrax::FileSetPresenter.prepend(IiifPrint::FileSetPresenterDecorator)
|
62
|
-
Hyrax::WorkShowPresenter.prepend(IiifPrint::WorkShowPresenterDecorator)
|
63
|
-
Hyrax::IiifHelper.prepend(IiifPrint::IiifHelperDecorator)
|
64
|
-
|
65
|
-
if ActiveModel::Type::Boolean.new.cast(ENV.fetch('HYRAX_VALKYRIE', false))
|
66
|
-
# Newer versions of Hyrax favor `Hyrax::Indexers::FileSetIndexer` and deprecate
|
67
|
-
# `Hyrax::ValkyrieFileSetIndexer`.
|
68
|
-
'Hyrax::Indexers::FileSetIndexer'.safe_constantize&.prepend(IiifPrint::FileSetIndexer)
|
69
|
-
|
70
|
-
# Versions 3.0+ of Hyrax have `Hyrax::ValkyrieFileSetIndexer` so we want to decorate that as
|
71
|
-
# well. We want to use the elsif construct because later on Hyrax::ValkyrieFileSetIndexer
|
72
|
-
# inherits from Hyrax::Indexers::FileSetIndexer and only implements:
|
73
|
-
# `def initialize(*args); super; end`
|
74
|
-
'Hyrax::ValkyrieFileSetIndexer'.safe_constantize&.prepend(IiifPrint::FileSetIndexer)
|
75
|
-
|
76
|
-
# Newer versions of Hyrax favor `Hyrax::Indexers::PcdmObjectIndexer` and deprecate
|
77
|
-
# `Hyrax::ValkyrieWorkIndexer`
|
78
|
-
indexers = Hyrax.config.curation_concerns.map do |concern|
|
79
|
-
"#{concern}ResourceIndexer".safe_constantize
|
80
|
-
end
|
81
|
-
indexers.each { |indexer| indexer.prepend(IiifPrint::ChildWorkIndexer) }
|
82
|
-
|
83
|
-
# Versions 3.0+ of Hyrax have `Hyrax::ValkyrieWorkIndexer` so we want to decorate that as
|
84
|
-
# well. We want to use the elsif construct because later on Hyrax::ValkyrieWorkIndexer
|
85
|
-
# inherits from Hyrax::Indexers::PcdmObjectIndexer and only implements:
|
86
|
-
# `def initialize(*args); super; end`
|
87
|
-
'Hyrax::ValkyrieWorkIndexer'.safe_constantize&.prepend(IiifPrint::ChildWorkIndexer)
|
88
|
-
else
|
89
|
-
# The ActiveFedora::Base indexer for FileSets
|
90
|
-
Hyrax::FileSetIndexer.prepend(IiifPrint::FileSetIndexer)
|
91
|
-
# The ActiveFedora::Base indexer for Works
|
92
|
-
Hyrax::WorkIndexer.prepend(IiifPrint::ChildWorkIndexer)
|
51
|
+
# Allows us to use decorator files
|
52
|
+
Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_decorator*.rb")).sort.each do |c|
|
53
|
+
Rails.configuration.cache_classes ? require(c) : load(c)
|
93
54
|
end
|
94
55
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
Hyrax::Actors::FileSetActor.prepend(IiifPrint::Actors::FileSetActorDecorator)
|
99
|
-
Hyrax::Actors::CleanupFileSetsActor.prepend(IiifPrint::Actors::CleanupFileSetsActorDecorator)
|
56
|
+
Dir.glob(File.join(File.dirname(__FILE__), "../../lib/**/*_decorator*.rb")).sort.each do |c|
|
57
|
+
Rails.configuration.cache_classes ? require(c) : load(c)
|
58
|
+
end
|
100
59
|
|
101
60
|
Hyrax.config do |config|
|
102
61
|
config.callback.set(:after_create_fileset) do |file_set, user|
|
@@ -104,12 +63,6 @@ module IiifPrint
|
|
104
63
|
end
|
105
64
|
end
|
106
65
|
end
|
107
|
-
|
108
|
-
config.after_initialize do
|
109
|
-
IiifPrint::Solr::Document.decorate(SolrDocument)
|
110
|
-
Hyrax::IiifManifestPresenter::DisplayImagePresenter
|
111
|
-
.prepend(IiifPrint::IiifManifestPresenterBehavior::DisplayImagePresenterBehavior)
|
112
|
-
end
|
113
66
|
# rubocop:enable Metrics/BlockLength
|
114
67
|
end
|
115
68
|
end
|
@@ -28,7 +28,10 @@ module IiifPrint
|
|
28
28
|
|
29
29
|
ocr_derivatives.each do |extension, method_name|
|
30
30
|
path = prepare_path(extension.to_s)
|
31
|
-
|
31
|
+
content = ocr.public_send(method_name)
|
32
|
+
next if content.blank?
|
33
|
+
|
34
|
+
write(content: content, path: path, extension: extension)
|
32
35
|
end
|
33
36
|
end
|
34
37
|
|
data/lib/iiif_print/version.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
module IiifPrint
|
2
|
+
module WorksControllerBehaviorDecorator
|
3
|
+
# Extending the presenter to the base url which includes the protocol.
|
4
|
+
# We need the base url to render the facet links.
|
5
|
+
def iiif_manifest_presenter
|
6
|
+
super.tap { |i| i.base_url = request.base_url }
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
Hyrax::WorksControllerBehavior.prepend(IiifPrint::WorksControllerBehaviorDecorator)
|
11
|
+
# Hyku::WorksControllerBehavior was introduced in Hyku v6.0.0+. Yes we don't depend on Hyku,
|
12
|
+
# but this allows us to do minimal Hyku antics with IiifPrint.
|
13
|
+
'Hyku::WorksControllerBehavior'.safe_constantize&.prepend(IiifPrint::WorksControllerBehaviorDecorator)
|
data/lib/iiif_print.rb
CHANGED
@@ -13,8 +13,6 @@ require "iiif_print/text_formats_from_alto_service"
|
|
13
13
|
require "iiif_print/tiff_derivative_service"
|
14
14
|
require "iiif_print/lineage_service"
|
15
15
|
require "iiif_print/metadata"
|
16
|
-
require "iiif_print/works_controller_behavior"
|
17
|
-
require "iiif_print/blacklight_iiif_search/annotation_decorator"
|
18
16
|
require "iiif_print/split_pdfs/base_splitter"
|
19
17
|
require "iiif_print/split_pdfs/child_work_creation_from_pdf_service"
|
20
18
|
require "iiif_print/split_pdfs/derivative_rodeo_splitter"
|
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:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Upton
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2024-
|
17
|
+
date: 2024-07-04 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: blacklight_iiif_search
|
@@ -363,8 +363,8 @@ files:
|
|
363
363
|
- app/helpers/iiif_print/iiif_helper_decorator.rb
|
364
364
|
- app/helpers/iiif_print/iiif_print_helper_behavior.rb
|
365
365
|
- app/helpers/iiif_print_helper.rb
|
366
|
-
- app/indexers/concerns/iiif_print/
|
367
|
-
- app/indexers/concerns/iiif_print/
|
366
|
+
- app/indexers/concerns/iiif_print/child_work_indexer_decorator.rb
|
367
|
+
- app/indexers/concerns/iiif_print/file_set_indexer_decorator.rb
|
368
368
|
- app/jobs/iiif_print/jobs/application_job.rb
|
369
369
|
- app/jobs/iiif_print/jobs/child_works_from_pdf_job.rb
|
370
370
|
- app/jobs/iiif_print/jobs/create_relationships_job.rb
|
@@ -372,7 +372,7 @@ files:
|
|
372
372
|
- app/listeners/iiif_print/listener.rb
|
373
373
|
- app/mailers/iiif_print/application_mailer.rb
|
374
374
|
- app/models/concerns/iiif_print/set_child_flag.rb
|
375
|
-
- app/models/concerns/iiif_print/
|
375
|
+
- app/models/concerns/iiif_print/solr_document_decorator.rb
|
376
376
|
- app/models/iiif_print/application_record.rb
|
377
377
|
- app/models/iiif_print/derivative_attachment.rb
|
378
378
|
- app/models/iiif_print/iiif_search_decorator.rb
|
@@ -380,15 +380,16 @@ files:
|
|
380
380
|
- app/models/iiif_print/ingest_file_relation.rb
|
381
381
|
- app/models/iiif_print/pending_relationship.rb
|
382
382
|
- app/presenters/iiif_print/file_set_presenter_decorator.rb
|
383
|
-
- app/presenters/iiif_print/
|
384
|
-
- app/presenters/iiif_print/
|
383
|
+
- app/presenters/iiif_print/iiif_manifest_presenter/display_image_presenter_decorator.rb
|
384
|
+
- app/presenters/iiif_print/iiif_manifest_presenter_decorator.rb
|
385
|
+
- app/presenters/iiif_print/iiif_manifest_presenter_factory_decorator.rb
|
385
386
|
- app/presenters/iiif_print/work_show_presenter_decorator.rb
|
386
387
|
- app/renderers/hyrax/renderers/faceted_attribute_renderer_decorator.rb
|
387
388
|
- app/search_builders/concerns/iiif_print/allinson_flex_fields.rb
|
388
389
|
- app/search_builders/concerns/iiif_print/exclude_models.rb
|
389
390
|
- app/search_builders/concerns/iiif_print/highlight_search_params.rb
|
390
391
|
- app/services/iiif_print/derivative_rodeo_service.rb
|
391
|
-
- app/services/iiif_print/
|
392
|
+
- app/services/iiif_print/manifest_builder_service_decorator.rb
|
392
393
|
- app/services/iiif_print/pluggable_derivative_service.rb
|
393
394
|
- app/services/iiif_print/simple_schema_loader_decorator.rb
|
394
395
|
- app/transactions/hyrax/transactions/iiif_print_container_decorator.rb
|
@@ -401,7 +402,6 @@ files:
|
|
401
402
|
- app/views/hyrax/file_sets/_show_actions.html.erb
|
402
403
|
- config/fcrepo_wrapper_test.yml
|
403
404
|
- config/initializers/assets.rb
|
404
|
-
- config/initializers/simple_schema_loader.rb
|
405
405
|
- config/locales/iiif_print.de.yml
|
406
406
|
- config/locales/iiif_print.en.yml
|
407
407
|
- config/locales/iiif_print.es.yml
|
@@ -483,7 +483,7 @@ files:
|
|
483
483
|
- lib/iiif_print/text_formats_from_alto_service.rb
|
484
484
|
- lib/iiif_print/tiff_derivative_service.rb
|
485
485
|
- lib/iiif_print/version.rb
|
486
|
-
- lib/iiif_print/
|
486
|
+
- lib/iiif_print/works_controller_behavior_decorator.rb
|
487
487
|
- lib/samvera/derivatives.rb
|
488
488
|
- lib/samvera/derivatives/configuration.rb
|
489
489
|
- lib/samvera/derivatives/hyrax.rb
|
@@ -510,7 +510,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
510
510
|
- !ruby/object:Gem::Version
|
511
511
|
version: '0'
|
512
512
|
requirements: []
|
513
|
-
rubygems_version: 3.
|
513
|
+
rubygems_version: 3.1.6
|
514
514
|
signing_key:
|
515
515
|
specification_version: 4
|
516
516
|
summary: IiifPrint is a gem (Rails "engine") for Hyrax-based digital repository applications
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module IiifPrint
|
4
|
-
module ChildWorkIndexer
|
5
|
-
def to_solr
|
6
|
-
super.tap do |index_document|
|
7
|
-
index_solr_doc(index_document)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def generate_solr_document
|
12
|
-
super.tap do |solr_doc|
|
13
|
-
index_solr_doc(solr_doc)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def index_solr_doc(solr_doc)
|
20
|
-
object ||= @object || resource
|
21
|
-
solr_doc['is_child_bsi'] ||= object.try(:is_child)
|
22
|
-
solr_doc['split_from_pdf_id_ssi'] ||= object.try(:split_from_pdf_id)
|
23
|
-
solr_doc['is_page_of_ssim'] = iiif_print_lineage_service.ancestor_ids_for(object)
|
24
|
-
solr_doc['member_ids_ssim'] = iiif_print_lineage_service.descendent_member_ids_for(object)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
module IiifPrint::Solr::Document
|
2
|
-
# @note Why decorate? We want to avoid including this module via generator. And the generator
|
3
|
-
# previously did two things: 1) include `IiifPrint::Solr::Document` in `SolrDocument`; 2)
|
4
|
-
# add the `attribute :is_child` field to the SolrDocument. We can't rely on `included do`
|
5
|
-
# block to handle that.
|
6
|
-
#
|
7
|
-
# This method is responsible for configuring the SolrDocument for a Hyrax/Hyku application. It
|
8
|
-
# does three things:
|
9
|
-
#
|
10
|
-
# 1. Adds instance methods to the SolrDocument (see implementation below)
|
11
|
-
# 2. Adds the `is_child` attribute to the SolrDocument
|
12
|
-
# 3. Adds a class attribute (e.g. `iiif_print_solr_field_names`) to allow further customization.
|
13
|
-
#
|
14
|
-
# @note These `iiif_print_solr_field_names` came from the newspaper_works implementation and are
|
15
|
-
# carried forward without much consideration, except to say "Make it configurable!"
|
16
|
-
#
|
17
|
-
# @param base [Class<SolrDocument>]
|
18
|
-
# @return [Class<SolrDocument>]
|
19
|
-
def self.decorate(base)
|
20
|
-
base.prepend(self)
|
21
|
-
base.send(:attribute, :is_child, Hyrax::SolrDocument::Metadata::Solr::String, 'is_child_bsi')
|
22
|
-
base.send(:attribute, :split_from_pdf_id, Hyrax::SolrDocument::Metadata::Solr::String, 'split_from_pdf_id_ssi')
|
23
|
-
base.send(:attribute, :digest, Hyrax::SolrDocument::Metadata::Solr::String, 'digest_ssim')
|
24
|
-
|
25
|
-
# @note These properties came from the newspaper_works gem. They are configurable.
|
26
|
-
base.class_attribute :iiif_print_solr_field_names, default: %w[alternative_title genre
|
27
|
-
issn lccn oclcnum held_by text_direction
|
28
|
-
page_number section author photographer
|
29
|
-
volume issue_number geographic_coverage
|
30
|
-
extent publication_date height width
|
31
|
-
edition_number edition_name frequency preceded_by
|
32
|
-
succeeded_by]
|
33
|
-
base
|
34
|
-
end
|
35
|
-
|
36
|
-
def digest_sha1
|
37
|
-
digest[/urn:sha1:([\w]+)/, 1]
|
38
|
-
end
|
39
|
-
|
40
|
-
def method_missing(method_name, *args, &block)
|
41
|
-
super unless iiif_print_solr_field_names.include? method_name.to_s
|
42
|
-
self[IiifPrint.solr_name(method_name.to_s)]
|
43
|
-
end
|
44
|
-
|
45
|
-
def respond_to_missing?(method_name, include_private = false)
|
46
|
-
iiif_print_solr_field_names.include?(method_name.to_s) || super
|
47
|
-
end
|
48
|
-
|
49
|
-
# @see https://github.com/samvera/hyrax/commit/7108409c619cd2ba4ae8c836b9f3b429a7e9837b
|
50
|
-
def file_set_ids
|
51
|
-
# Yes, this looks a little odd. But the truth is the prior key (e.g. `file_set_ids_ssim`) was
|
52
|
-
# an alias of `member_ids_ssim`.
|
53
|
-
self['member_ids_ssim']
|
54
|
-
end
|
55
|
-
|
56
|
-
def any_highlighting?
|
57
|
-
response&.[]('highlighting')&.[](id)&.present?
|
58
|
-
end
|
59
|
-
|
60
|
-
def solr_document
|
61
|
-
self
|
62
|
-
end
|
63
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
"Hyrax::SimpleSchemaLoader".safe_constantize&.prepend(IiifPrint::SimpleSchemaLoaderDecorator)
|
@@ -1,9 +0,0 @@
|
|
1
|
-
module IiifPrint
|
2
|
-
module WorksControllerBehaviorDecorator
|
3
|
-
# Extending the presenter to the base url which includes the protocol.
|
4
|
-
# We need the base url to render the facet links.
|
5
|
-
def iiif_manifest_presenter
|
6
|
-
super.tap { |i| i.base_url = request.base_url }
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|