iiif_manifest 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +0 -0
- data/.rspec +0 -0
- data/.rubocop.yml +3 -0
- data/.rubocop_todo.yml +36 -0
- data/.travis.yml +0 -0
- data/CODE_OF_CONDUCT.md +0 -0
- data/Gemfile +0 -0
- data/LICENSE +0 -0
- data/README.md +27 -10
- data/Rakefile +0 -0
- data/iiif_manifest.gemspec +2 -1
- data/lib/iiif_manifest.rb +1 -0
- data/lib/iiif_manifest/display_image.rb +0 -0
- data/lib/iiif_manifest/iiif_collection.rb +6 -4
- data/lib/iiif_manifest/iiif_endpoint.rb +0 -0
- data/lib/iiif_manifest/manifest_builder.rb +6 -6
- data/lib/iiif_manifest/manifest_builder/canvas_builder.rb +12 -12
- data/lib/iiif_manifest/manifest_builder/canvas_builder_factory.rb +3 -3
- data/lib/iiif_manifest/manifest_builder/child_manifest_builder_factory.rb +0 -0
- data/lib/iiif_manifest/manifest_builder/composite_builder.rb +0 -0
- data/lib/iiif_manifest/manifest_builder/composite_builder_factory.rb +0 -0
- data/lib/iiif_manifest/manifest_builder/deep_canvas_builder_factory.rb +6 -6
- data/lib/iiif_manifest/manifest_builder/iiif_service.rb +0 -0
- data/lib/iiif_manifest/manifest_builder/image_builder.rb +9 -9
- data/lib/iiif_manifest/manifest_builder/image_service_builder.rb +3 -3
- data/lib/iiif_manifest/manifest_builder/record_property_builder.rb +50 -51
- data/lib/iiif_manifest/manifest_builder/resource_builder.rb +9 -9
- data/lib/iiif_manifest/manifest_builder/sequence_builder.rb +19 -19
- data/lib/iiif_manifest/manifest_builder/structure_builder.rb +0 -0
- data/lib/iiif_manifest/manifest_factory.rb +3 -3
- data/lib/iiif_manifest/manifest_service_locator.rb +0 -0
- data/lib/iiif_manifest/v3.rb +13 -0
- data/lib/iiif_manifest/v3/display_content.rb +17 -0
- data/lib/iiif_manifest/v3/manifest_builder.rb +61 -0
- data/lib/iiif_manifest/v3/manifest_builder/body_builder.rb +48 -0
- data/lib/iiif_manifest/v3/manifest_builder/canvas_builder.rb +77 -0
- data/lib/iiif_manifest/v3/manifest_builder/choice_builder.rb +47 -0
- data/lib/iiif_manifest/v3/manifest_builder/content_builder.rb +38 -0
- data/lib/iiif_manifest/v3/manifest_builder/iiif_service.rb +235 -0
- data/lib/iiif_manifest/v3/manifest_builder/image_service_builder.rb +35 -0
- data/lib/iiif_manifest/v3/manifest_builder/record_property_builder.rb +97 -0
- data/lib/iiif_manifest/v3/manifest_builder/structure_builder.rb +87 -0
- data/lib/iiif_manifest/v3/manifest_factory.rb +38 -0
- data/lib/iiif_manifest/v3/manifest_service_locator.rb +148 -0
- data/lib/iiif_manifest/version.rb +1 -1
- metadata +29 -2
@@ -0,0 +1,35 @@
|
|
1
|
+
module IIIFManifest
|
2
|
+
module V3
|
3
|
+
class ManifestBuilder
|
4
|
+
class ImageServiceBuilder
|
5
|
+
attr_reader :iiif_endpoint, :iiif_service_factory
|
6
|
+
def initialize(iiif_endpoint, iiif_service_factory:)
|
7
|
+
@iiif_endpoint = iiif_endpoint
|
8
|
+
@iiif_service_factory = iiif_service_factory
|
9
|
+
end
|
10
|
+
|
11
|
+
def apply(resource)
|
12
|
+
service['id'] = iiif_endpoint.url
|
13
|
+
service['profile'] = iiif_endpoint.profile
|
14
|
+
service['type'] = determine_type(iiif_endpoint.context)
|
15
|
+
resource.service = [service]
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def determine_type(context)
|
21
|
+
case context
|
22
|
+
when 'http://iiif.io/api/image/1/context.json'
|
23
|
+
'ImageService1'
|
24
|
+
when 'http://iiif.io/api/image/2/context.json'
|
25
|
+
'ImageService2'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def service
|
30
|
+
@service ||= iiif_service_factory.new
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module IIIFManifest
|
2
|
+
module V3
|
3
|
+
class ManifestBuilder
|
4
|
+
class RecordPropertyBuilder < ::IIIFManifest::ManifestBuilder::RecordPropertyBuilder
|
5
|
+
attr_reader :canvas_builder_factory
|
6
|
+
def initialize(record,
|
7
|
+
iiif_search_service_factory:,
|
8
|
+
iiif_autocomplete_service_factory:,
|
9
|
+
canvas_builder_factory:)
|
10
|
+
super(record,
|
11
|
+
iiif_search_service_factory: iiif_search_service_factory,
|
12
|
+
iiif_autocomplete_service_factory: iiif_autocomplete_service_factory)
|
13
|
+
@canvas_builder_factory = canvas_builder_factory
|
14
|
+
end
|
15
|
+
|
16
|
+
def apply(manifest)
|
17
|
+
setup_manifest_from_record(manifest, record)
|
18
|
+
# Build the items array
|
19
|
+
canvas_builder.apply(manifest.items)
|
20
|
+
manifest
|
21
|
+
end
|
22
|
+
|
23
|
+
def populate_rendering
|
24
|
+
if record.respond_to?(:sequence_rendering)
|
25
|
+
record.sequence_rendering.collect do |rendering|
|
26
|
+
sequence_rendering = rendering.to_h.except('@id', 'label')
|
27
|
+
sequence_rendering['id'] = rendering['@id']
|
28
|
+
if rendering['label'].present?
|
29
|
+
sequence_rendering['label'] = ManifestBuilder.language_map(rendering['label'])
|
30
|
+
end
|
31
|
+
sequence_rendering
|
32
|
+
end
|
33
|
+
else
|
34
|
+
[]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def canvas_builder
|
41
|
+
canvas_builder_factory.from(record)
|
42
|
+
end
|
43
|
+
|
44
|
+
def setup_manifest_from_record(manifest, record)
|
45
|
+
manifest['id'] = record.manifest_url.to_s
|
46
|
+
manifest.label = ManifestBuilder.language_map(record.to_s) if record.to_s.present?
|
47
|
+
manifest.summary = ManifestBuilder.language_map(record.description) if record.try(:description).present?
|
48
|
+
manifest.behavior = viewing_hint if viewing_hint.present?
|
49
|
+
manifest.metadata = metadata_from_record(record)
|
50
|
+
manifest.viewing_direction = viewing_direction if viewing_direction.present?
|
51
|
+
manifest.service = services if search_service.present?
|
52
|
+
manifest.rendering = populate_rendering
|
53
|
+
end
|
54
|
+
|
55
|
+
def metadata_from_record(record)
|
56
|
+
if valid_v3_metadata?
|
57
|
+
record.manifest_metadata
|
58
|
+
elsif valid_metadata?
|
59
|
+
transform_metadata(record.manifest_metadata)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Validate manifest_metadata against the IIIF spec format for metadata
|
64
|
+
#
|
65
|
+
# @return [Boolean]
|
66
|
+
def valid_v3_metadata?
|
67
|
+
return false unless record.respond_to?(:manifest_metadata)
|
68
|
+
metadata = record.manifest_metadata
|
69
|
+
valid_v3_metadata_fields?(metadata)
|
70
|
+
end
|
71
|
+
|
72
|
+
# Manifest metadata must be an array containing hashes
|
73
|
+
#
|
74
|
+
# @param metadata [Array<Hash>] a list of metadata with label and value as required keys for each entry
|
75
|
+
# @return [Boolean]
|
76
|
+
def valid_v3_metadata_fields?(metadata)
|
77
|
+
metadata.is_a?(Array) && metadata.all? do |metadata_field|
|
78
|
+
metadata_field.is_a?(Hash) &&
|
79
|
+
ManifestBuilder.valid_language_map?(metadata_field['label']) &&
|
80
|
+
ManifestBuilder.valid_language_map?(metadata_field['value'])
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def transform_metadata(metadata)
|
85
|
+
metadata.collect { |field| transform_field(field) }
|
86
|
+
end
|
87
|
+
|
88
|
+
def transform_field(field)
|
89
|
+
metadata_field = {}
|
90
|
+
metadata_field['label'] = ManifestBuilder.language_map(field['label'])
|
91
|
+
metadata_field['value'] = ManifestBuilder.language_map(field['value'])
|
92
|
+
metadata_field
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module IIIFManifest
|
2
|
+
module V3
|
3
|
+
class ManifestBuilder
|
4
|
+
class StructureBuilder < ::IIIFManifest::ManifestBuilder::StructureBuilder
|
5
|
+
def range_builder(top_range)
|
6
|
+
RangeBuilder.new(
|
7
|
+
top_range,
|
8
|
+
record, true,
|
9
|
+
canvas_builder_factory: canvas_builder_factory,
|
10
|
+
iiif_range_factory: iiif_range_factory
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
class RangeBuilder < ::IIIFManifest::ManifestBuilder::RangeBuilder
|
15
|
+
def apply(manifest)
|
16
|
+
manifest << range
|
17
|
+
sub_ranges.map do |sub_range|
|
18
|
+
sub_range.apply(range['items'])
|
19
|
+
end
|
20
|
+
range_items.map do |range_item|
|
21
|
+
next if range_item.nil?
|
22
|
+
if range_item.is_a? Hash
|
23
|
+
range['items'] << range_item
|
24
|
+
else
|
25
|
+
range_item.apply(range['items'])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
manifest
|
29
|
+
end
|
30
|
+
|
31
|
+
def build_range
|
32
|
+
range['id'] = path
|
33
|
+
range['label'] = ManifestBuilder.language_map(record.label) if record.try(:label).present?
|
34
|
+
range['behavior'] = 'top' if top?
|
35
|
+
range['items'] = canvas_builders.collect { |cb| { 'type' => 'Canvas', 'id' => cb.path } }
|
36
|
+
end
|
37
|
+
|
38
|
+
def canvas_builders
|
39
|
+
@canvas_builders ||= [] unless record.respond_to?(:file_set_presenters)
|
40
|
+
@canvas_builders ||= file_set_presenters.map do |file_set_presenter|
|
41
|
+
canvas_builder_factory.new(file_set_presenter, parent)
|
42
|
+
end
|
43
|
+
@canvas_builders
|
44
|
+
end
|
45
|
+
|
46
|
+
def sub_ranges
|
47
|
+
@sub_ranges ||= [] unless record.respond_to?(:ranges)
|
48
|
+
@sub_ranges ||= record.ranges.map do |sub_range|
|
49
|
+
RangeBuilder.new(
|
50
|
+
sub_range,
|
51
|
+
parent,
|
52
|
+
canvas_builder_factory: canvas_builder_factory,
|
53
|
+
iiif_range_factory: iiif_range_factory
|
54
|
+
)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def range_items
|
59
|
+
@range_items ||= [] unless record.respond_to?(:items)
|
60
|
+
@range_items ||= record.items.map do |range_item|
|
61
|
+
# Determine if this item is a range or canvas
|
62
|
+
if range_item.respond_to? :id
|
63
|
+
canvas_range_item(range_item)
|
64
|
+
elsif range_item.respond_to? :label
|
65
|
+
range_range_item(range_item)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
@range_items
|
69
|
+
end
|
70
|
+
|
71
|
+
def canvas_range_item(range_item)
|
72
|
+
canvas_builder = canvas_builder_factory.new(range_item, parent)
|
73
|
+
{ 'type' => 'Canvas', 'id' => canvas_builder.path }
|
74
|
+
end
|
75
|
+
|
76
|
+
def range_range_item(range_item)
|
77
|
+
RangeBuilder.new(
|
78
|
+
range_item,
|
79
|
+
parent,
|
80
|
+
canvas_builder_factory: canvas_builder_factory,
|
81
|
+
iiif_range_factory: iiif_range_factory
|
82
|
+
)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module IIIFManifest
|
2
|
+
module V3
|
3
|
+
class ManifestFactory
|
4
|
+
class << self
|
5
|
+
def new(work, manifest_service_locator: ManifestServiceLocator)
|
6
|
+
super(manifest_service_locator).new(work)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
delegate :collection_manifest_builder, :manifest_builder, :sammelband_manifest_builder,
|
11
|
+
to: :manifest_service_locator
|
12
|
+
attr_reader :manifest_service_locator
|
13
|
+
|
14
|
+
def initialize(manifest_service_locator)
|
15
|
+
@manifest_service_locator = manifest_service_locator
|
16
|
+
end
|
17
|
+
|
18
|
+
def new(work)
|
19
|
+
if !work.work_presenters.empty?
|
20
|
+
if sammelband?(work) || !work.file_set_presenters.empty?
|
21
|
+
manifest_builder.new(work)
|
22
|
+
elsif work.file_set_presenters.empty?
|
23
|
+
work = IIIFManifest::IIIFCollection.new(work)
|
24
|
+
collection_manifest_builder.new(work)
|
25
|
+
end
|
26
|
+
else
|
27
|
+
manifest_builder.new(work)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def sammelband?(work)
|
34
|
+
work.respond_to?(:sammelband?) && work.sammelband?
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
module IIIFManifest
|
2
|
+
module V3
|
3
|
+
class ManifestServiceLocator < IIIFManifest::ManifestServiceLocator
|
4
|
+
class << self
|
5
|
+
# Builders which receive a work as an argument to .new and return objects
|
6
|
+
# that respond to #apply.
|
7
|
+
def manifest_builders
|
8
|
+
composite_builder_factory.new(
|
9
|
+
record_property_builder,
|
10
|
+
structure_builder,
|
11
|
+
composite_builder: composite_builder
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
def collection_manifest_builders
|
16
|
+
composite_builder_factory.new(
|
17
|
+
record_property_builder,
|
18
|
+
child_manifest_builder_factory,
|
19
|
+
composite_builder: composite_builder
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
def iiif_collection_factory
|
24
|
+
IIIFManifest::V3::ManifestBuilder::IIIFManifest::Collection
|
25
|
+
end
|
26
|
+
|
27
|
+
def record_property_builder
|
28
|
+
IIIFManifest::ManifestServiceLocator::InjectedFactory.new(
|
29
|
+
ManifestBuilder::RecordPropertyBuilder,
|
30
|
+
iiif_search_service_factory: iiif_search_service_factory,
|
31
|
+
iiif_autocomplete_service_factory: iiif_autocomplete_service_factory,
|
32
|
+
canvas_builder_factory: deep_canvas_builder_factory
|
33
|
+
# canvas_builder_factory: canvas_builder_factory
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
def structure_builder
|
38
|
+
IIIFManifest::ManifestServiceLocator::InjectedFactory.new(
|
39
|
+
ManifestBuilder::StructureBuilder,
|
40
|
+
canvas_builder_factory: canvas_builder,
|
41
|
+
iiif_range_factory: iiif_range_factory
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
def canvas_builder_factory
|
46
|
+
IIIFManifest::ManifestBuilder::CanvasBuilderFactory.new(
|
47
|
+
composite_builder: composite_builder,
|
48
|
+
canvas_builder_factory: canvas_builder
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
def canvas_builder
|
53
|
+
IIIFManifest::ManifestServiceLocator::InjectedFactory.new(
|
54
|
+
ManifestBuilder::CanvasBuilder,
|
55
|
+
iiif_canvas_factory: iiif_canvas_factory,
|
56
|
+
content_builder: content_builder,
|
57
|
+
choice_builder: choice_builder,
|
58
|
+
iiif_annotation_page_factory: iiif_annotation_page_factory
|
59
|
+
)
|
60
|
+
end
|
61
|
+
|
62
|
+
def content_builder
|
63
|
+
IIIFManifest::ManifestServiceLocator::InjectedFactory.new(
|
64
|
+
ManifestBuilder::ContentBuilder,
|
65
|
+
iiif_annotation_factory: iiif_annotation_factory,
|
66
|
+
body_builder_factory: body_builder_factory
|
67
|
+
)
|
68
|
+
end
|
69
|
+
|
70
|
+
def choice_builder
|
71
|
+
IIIFManifest::ManifestServiceLocator::InjectedFactory.new(
|
72
|
+
ManifestBuilder::ChoiceBuilder,
|
73
|
+
iiif_annotation_factory: iiif_annotation_factory,
|
74
|
+
body_builder_factory: body_builder_factory,
|
75
|
+
iiif_choice_factory: iiif_choice_factory
|
76
|
+
)
|
77
|
+
end
|
78
|
+
|
79
|
+
def body_builder_factory
|
80
|
+
IIIFManifest::ManifestServiceLocator::InjectedFactory.new(
|
81
|
+
ManifestBuilder::BodyBuilder,
|
82
|
+
iiif_body_factory: iiif_body_factory,
|
83
|
+
image_service_builder_factory: image_service_builder_factory
|
84
|
+
)
|
85
|
+
end
|
86
|
+
|
87
|
+
def image_service_builder_factory
|
88
|
+
IIIFManifest::ManifestServiceLocator::InjectedFactory.new(
|
89
|
+
ManifestBuilder::ImageServiceBuilder,
|
90
|
+
iiif_service_factory: iiif_service_factory
|
91
|
+
)
|
92
|
+
end
|
93
|
+
|
94
|
+
def sequence_builder
|
95
|
+
raise NotImplementedError
|
96
|
+
end
|
97
|
+
|
98
|
+
def sammelband_sequence_builder
|
99
|
+
raise NotImplementedError
|
100
|
+
end
|
101
|
+
|
102
|
+
def sequence_factory
|
103
|
+
raise NotImplementedError
|
104
|
+
end
|
105
|
+
|
106
|
+
def iiif_service_factory
|
107
|
+
IIIFManifest::V3::ManifestBuilder::IIIFService
|
108
|
+
end
|
109
|
+
|
110
|
+
def iiif_body_factory
|
111
|
+
IIIFManifest::V3::ManifestBuilder::IIIFManifest::Body
|
112
|
+
end
|
113
|
+
|
114
|
+
def iiif_choice_factory
|
115
|
+
IIIFManifest::V3::ManifestBuilder::IIIFManifest::Choice
|
116
|
+
end
|
117
|
+
|
118
|
+
def iiif_annotation_factory
|
119
|
+
IIIFManifest::V3::ManifestBuilder::IIIFManifest::Annotation
|
120
|
+
end
|
121
|
+
|
122
|
+
def iiif_annotation_page_factory
|
123
|
+
IIIFManifest::V3::ManifestBuilder::IIIFManifest::AnnotationPage
|
124
|
+
end
|
125
|
+
|
126
|
+
def iiif_manifest_factory
|
127
|
+
IIIFManifest::V3::ManifestBuilder::IIIFManifest
|
128
|
+
end
|
129
|
+
|
130
|
+
def iiif_canvas_factory
|
131
|
+
IIIFManifest::V3::ManifestBuilder::IIIFManifest::Canvas
|
132
|
+
end
|
133
|
+
|
134
|
+
def iiif_range_factory
|
135
|
+
IIIFManifest::V3::ManifestBuilder::IIIFManifest::Range
|
136
|
+
end
|
137
|
+
|
138
|
+
def iiif_search_service_factory
|
139
|
+
IIIFManifest::V3::ManifestBuilder::IIIFManifest::SearchService
|
140
|
+
end
|
141
|
+
|
142
|
+
def iiif_autocomplete_service_factory
|
143
|
+
IIIFManifest::V3::ManifestBuilder::IIIFManifest::AutocompleteService
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iiif_manifest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Coyne
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-10-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -25,6 +25,20 @@ dependencies:
|
|
25
25
|
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '4'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: bixby
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '1.0'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '1.0'
|
28
42
|
- !ruby/object:Gem::Dependency
|
29
43
|
name: bundler
|
30
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -151,6 +165,19 @@ files:
|
|
151
165
|
- lib/iiif_manifest/manifest_builder/structure_builder.rb
|
152
166
|
- lib/iiif_manifest/manifest_factory.rb
|
153
167
|
- lib/iiif_manifest/manifest_service_locator.rb
|
168
|
+
- lib/iiif_manifest/v3.rb
|
169
|
+
- lib/iiif_manifest/v3/display_content.rb
|
170
|
+
- lib/iiif_manifest/v3/manifest_builder.rb
|
171
|
+
- lib/iiif_manifest/v3/manifest_builder/body_builder.rb
|
172
|
+
- lib/iiif_manifest/v3/manifest_builder/canvas_builder.rb
|
173
|
+
- lib/iiif_manifest/v3/manifest_builder/choice_builder.rb
|
174
|
+
- lib/iiif_manifest/v3/manifest_builder/content_builder.rb
|
175
|
+
- lib/iiif_manifest/v3/manifest_builder/iiif_service.rb
|
176
|
+
- lib/iiif_manifest/v3/manifest_builder/image_service_builder.rb
|
177
|
+
- lib/iiif_manifest/v3/manifest_builder/record_property_builder.rb
|
178
|
+
- lib/iiif_manifest/v3/manifest_builder/structure_builder.rb
|
179
|
+
- lib/iiif_manifest/v3/manifest_factory.rb
|
180
|
+
- lib/iiif_manifest/v3/manifest_service_locator.rb
|
154
181
|
- lib/iiif_manifest/version.rb
|
155
182
|
homepage: http://github.com/projecthydra-labs/iiif_manifest
|
156
183
|
licenses: []
|