relaton-render 3.0.0.pre.alpha.4 → 3.0.0.pre.alpha.5
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/lib/relaton/render/iso690/element.rb +8 -0
- data/lib/relaton/render/iso690/elements/component_part.rb +2 -1
- data/lib/relaton/render/iso690/elements/series.rb +2 -1
- data/lib/relaton/render/iso690/elements/title.rb +7 -3
- data/lib/relaton/render/iso690/fields.rb +12 -1
- data/lib/relaton/render/iso690/identifier_kinds.rb +6 -2
- data/lib/relaton/render/iso690/style/type_template.rb +2 -0
- data/lib/relaton/render/iso690/style.rb +9 -0
- data/lib/relaton/render/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8cf356647bbf5280c9c9e4300c861917b428fc8d248db8a94b3c7b66916a0c01
|
|
4
|
+
data.tar.gz: 81bbe019e929ae84c4db8ca0808a10029c55dce0f61c94e072aa03c9d01127be
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 61831187b3aba40f2e3701e00b0af1d89e25f219dc735cbb1d36877a0431c0e548776b39d1b90ee8606dfdb4968962a58f61c82f83ba734b9ba4756bb02cd11e
|
|
7
|
+
data.tar.gz: 640b3659f2bd48a9b6cfb46c063f8d4ed7ecfe15fef2c7961c208875b56a9c7514a0641edcad9e3f335ba7fab91581044d832b737944c9a8c7a9cd134d77cb23
|
|
@@ -29,6 +29,14 @@ module Relaton
|
|
|
29
29
|
value&.content.to_s
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
+
# Localizable values scoped to the render language: the variants
|
|
33
|
+
# declared in that language, or all of them when none matches
|
|
34
|
+
def titles_in_lang(values)
|
|
35
|
+
titles = Array(values)
|
|
36
|
+
in_lang = titles.select { |t| Array(t.language).include?(@i18n.lang) }
|
|
37
|
+
in_lang.empty? ? titles : in_lang
|
|
38
|
+
end
|
|
39
|
+
|
|
32
40
|
def contributors(role)
|
|
33
41
|
Array(@model.contributor).select { |c| has_role?(c, role) }
|
|
34
42
|
end
|
|
@@ -40,7 +40,8 @@ module Relaton
|
|
|
40
40
|
def host_title_text
|
|
41
41
|
return localized(relation&.description) if host.nil?
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
titles_in_lang(host.title).map { |t| localized(t) }
|
|
44
|
+
.join(" ").strip
|
|
44
45
|
end
|
|
45
46
|
|
|
46
47
|
def host_title
|
|
@@ -33,10 +33,14 @@ module Relaton
|
|
|
33
33
|
.include?(Kinds.kind_for(@model.type))
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
+
# A typed main title wins; an untyped title is main by
|
|
37
|
+
# default, but yields to a typed one
|
|
36
38
|
def main_title
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
titles = Array(@model.title)
|
|
40
|
+
mains = titles.select { |x| x.type == "main" }
|
|
41
|
+
mains = titles.select { |x| x.type.nil? } if mains.empty?
|
|
42
|
+
mains = titles if mains.empty?
|
|
43
|
+
localized(titles_in_lang(mains).first)
|
|
40
44
|
end
|
|
41
45
|
end
|
|
42
46
|
end
|
|
@@ -35,7 +35,18 @@ module Relaton
|
|
|
35
35
|
def element_field(slot)
|
|
36
36
|
element = Elements.build(slot, @model, style: @style, i18n: @i18n)
|
|
37
37
|
text = element.render.to_s
|
|
38
|
-
|
|
38
|
+
if element.present? && !text.empty?
|
|
39
|
+
return Template::Field[true, text]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
fallback = @style.fallback_for(item_kind, slot)
|
|
43
|
+
return Template::Field[true, fallback] if fallback
|
|
44
|
+
|
|
45
|
+
Template::Field[false, ""]
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def item_kind
|
|
49
|
+
Kinds.kind_for(@model.type)
|
|
39
50
|
end
|
|
40
51
|
|
|
41
52
|
def name_fields
|
|
@@ -16,15 +16,19 @@ module Relaton
|
|
|
16
16
|
"MRN" => ->(content) { content },
|
|
17
17
|
}.freeze
|
|
18
18
|
|
|
19
|
+
# Flavor-registered kinds, consulted before the built-ins; the
|
|
20
|
+
# registry is process-wide by design
|
|
21
|
+
OVERRIDES = {}
|
|
22
|
+
|
|
19
23
|
class << self
|
|
20
24
|
def register(type, kind)
|
|
21
|
-
|
|
25
|
+
OVERRIDES[type] = kind
|
|
22
26
|
kind
|
|
23
27
|
end
|
|
24
28
|
|
|
25
29
|
def render(docidentifier)
|
|
26
30
|
content = docidentifier.content.to_s
|
|
27
|
-
kind = KINDS[docidentifier.type]
|
|
31
|
+
kind = OVERRIDES[docidentifier.type] || KINDS[docidentifier.type]
|
|
28
32
|
kind ? kind.call(content) : content
|
|
29
33
|
end
|
|
30
34
|
end
|
|
@@ -12,6 +12,7 @@ module Relaton
|
|
|
12
12
|
attribute :series, :string
|
|
13
13
|
attribute :title, :string
|
|
14
14
|
attribute :home, :boolean
|
|
15
|
+
attribute :fallbacks, :hash, default: -> { {} }
|
|
15
16
|
|
|
16
17
|
key_value do
|
|
17
18
|
map "type", to: :type
|
|
@@ -19,6 +20,7 @@ module Relaton
|
|
|
19
20
|
map "series", to: :series
|
|
20
21
|
map "title", to: :title
|
|
21
22
|
map "home", to: :home
|
|
23
|
+
map "fallbacks", to: :fallbacks
|
|
22
24
|
end
|
|
23
25
|
end
|
|
24
26
|
end
|
|
@@ -52,6 +52,15 @@ module Relaton
|
|
|
52
52
|
candidates.first&.template || templates.reference
|
|
53
53
|
end
|
|
54
54
|
|
|
55
|
+
def type_template_for(type)
|
|
56
|
+
per_type.find { |t| t.type == type.to_s }
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# The absent-slot replacement text declared for a type, when any
|
|
60
|
+
def fallback_for(type, slot)
|
|
61
|
+
type_template_for(type)&.fallbacks&.[](slot.to_s)
|
|
62
|
+
end
|
|
63
|
+
|
|
55
64
|
def title_form_for(type)
|
|
56
65
|
per_type.lazy.select { |t| t.type == type.to_s }
|
|
57
66
|
.find { |t| t.title && !t.title.empty? }&.title
|