mods_display 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/components/mods_display/field_component.rb +1 -1
- data/app/helpers/mods_display/record_helper.rb +29 -5
- data/lib/mods_display/fields/contents.rb +1 -1
- data/lib/mods_display/fields/field.rb +2 -1
- data/lib/mods_display/fields/imprint.rb +7 -7
- data/lib/mods_display/fields/nested_related_item.rb +1 -1
- data/lib/mods_display/fields/note.rb +2 -2
- data/lib/mods_display/fields/values.rb +3 -2
- data/lib/mods_display/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fca38dd10bf2fbf3ebe62b1162b82cd9c5f63c43fff47e8021ff8d0cfa2a3f62
|
4
|
+
data.tar.gz: 60f1b639ea711faf9d021534e429f8789f0bfe3d7a5be94aa9c73da765cf180b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6bf3145385c0d2e40b2cabe5db955a5ccb1abb3d63a6af3825c34da1e5d4cfef3d89020866dd6d3b2de71b1ed55516833c8a550cacab2899a7b496552f878878
|
7
|
+
data.tar.gz: abf9b36c1a4299c954c7851487404fa7b0f8a29cae6c48145cd9b37a0d032fffc46bd322f00cec3519df4b356bf676cbd7e085d7b8ff13fb2484a89e88114381
|
@@ -69,12 +69,19 @@ module ModsDisplay
|
|
69
69
|
link
|
70
70
|
end
|
71
71
|
|
72
|
-
|
73
|
-
# @private, but used in PURL currently
|
74
|
-
def link_urls_and_email(val, tags: %w[a dl dd dt i b em strong cite br])
|
72
|
+
def format_mods_html(val, tags: %w[a dl dd dt i b em strong cite br], field: nil)
|
75
73
|
val = val.gsub(%r{<[^/> ]+}) do |possible_tag|
|
76
74
|
# Allow potentially valid HTML tags through to the sanitizer step, and HTML escape the rest
|
77
|
-
if tags.include?
|
75
|
+
if tags.include?(possible_tag[1..])
|
76
|
+
possible_tag
|
77
|
+
else
|
78
|
+
"<#{possible_tag[1..]}"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
val = val.gsub(%r{</[^> ]+}) do |possible_tag|
|
83
|
+
# Allow potentially valid HTML tags through to the sanitizer step, and HTML escape the rest
|
84
|
+
if tags.include?(possible_tag[2..])
|
78
85
|
possible_tag
|
79
86
|
else
|
80
87
|
"<#{possible_tag[1..]}"
|
@@ -98,7 +105,24 @@ module ModsDisplay
|
|
98
105
|
end
|
99
106
|
end
|
100
107
|
|
101
|
-
sanitize val, tags: tags, attributes: %w[href]
|
108
|
+
formatted_val = sanitize val, tags: tags, attributes: %w[href]
|
109
|
+
|
110
|
+
# Martin Wong data has significant linebreaks in abstracts and notes that we want
|
111
|
+
# to preserve and display in HTML.
|
112
|
+
#
|
113
|
+
# See https://github.com/sul-dlss/mods_display/issues/78
|
114
|
+
simple_formatted_fields = [ModsDisplay::Abstract, ModsDisplay::Contents, ModsDisplay::Note]
|
115
|
+
if simple_formatted_fields.any? { |klass| field&.field.is_a? klass } && formatted_val.include?("\n")
|
116
|
+
simple_format(formatted_val, {}, sanitize: false)
|
117
|
+
else
|
118
|
+
formatted_val
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
# rubocop:disable Layout/LineLength
|
123
|
+
# @private, but used in PURL currently
|
124
|
+
def link_urls_and_email(val, tags: %w[a dl dd dt i b em strong cite br])
|
125
|
+
format_mods_html(val, tags: tags)
|
102
126
|
end
|
103
127
|
# rubocop:enable Layout/LineLength
|
104
128
|
end
|
@@ -4,7 +4,7 @@ module ModsDisplay
|
|
4
4
|
class Contents < Field
|
5
5
|
def to_html(view_context = ApplicationController.renderer)
|
6
6
|
f = fields.map do |field|
|
7
|
-
ModsDisplay::Values.new(label: field.label, values: [field.values.join("\n\n")])
|
7
|
+
ModsDisplay::Values.new(label: field.label, values: [field.values.join("\n\n")], field: self)
|
8
8
|
end
|
9
9
|
|
10
10
|
helpers = view_context.respond_to?(:simple_format) ? view_context : ApplicationController.new.view_context
|
@@ -67,7 +67,7 @@ module ModsDisplay
|
|
67
67
|
end
|
68
68
|
|
69
69
|
# Element text reduced to digits and hyphen. Captures date ranges and
|
70
|
-
# negative (
|
70
|
+
# negative (BCE) dates. Used for comparison/deduping.
|
71
71
|
def base_value
|
72
72
|
if text =~ /^\[?1\d{3}-\d{2}\??\]?$/
|
73
73
|
return text.sub(/(\d{2})(\d{2})-(\d{2})/, '\1\2-\1\3')
|
@@ -93,10 +93,10 @@ module ModsDisplay
|
|
93
93
|
when :year
|
94
94
|
year = date.year
|
95
95
|
if year < 1
|
96
|
-
"#{year.abs + 1}
|
97
|
-
# Any dates before the year 1000 are explicitly marked
|
96
|
+
"#{year.abs + 1} BCE"
|
97
|
+
# Any dates before the year 1000 are explicitly marked CE
|
98
98
|
elsif year > 1 && year < 1000
|
99
|
-
"#{year}
|
99
|
+
"#{year} CE"
|
100
100
|
else
|
101
101
|
year.to_s
|
102
102
|
end
|
@@ -109,7 +109,7 @@ module ModsDisplay
|
|
109
109
|
end
|
110
110
|
end
|
111
111
|
|
112
|
-
# Decoded date with "
|
112
|
+
# Decoded date with "BCE" or "CE" and qualifier markers. See (outdated):
|
113
113
|
# https://consul.stanford.edu/display/chimera/MODS+display+rules#MODSdisplayrules-3b.%3CoriginInfo%3E
|
114
114
|
def qualified_value
|
115
115
|
date = decoded_value
|
@@ -143,7 +143,7 @@ module ModsDisplay
|
|
143
143
|
@start&.encoding || @stop&.encoding
|
144
144
|
end
|
145
145
|
|
146
|
-
# Decoded dates with "
|
146
|
+
# Decoded dates with "BCE" or "CE" and qualifier markers applied to
|
147
147
|
# the entire range, or individually if dates differ.
|
148
148
|
def qualified_value
|
149
149
|
if @start&.qualifier == @stop&.qualifier
|
@@ -192,7 +192,7 @@ module ModsDisplay
|
|
192
192
|
.map(&:base_values).flatten
|
193
193
|
dates = dates.reject { |date| range_base_values.include?(date.base_value) }
|
194
194
|
|
195
|
-
# output formatted dates with qualifiers,
|
195
|
+
# output formatted dates with qualifiers, CE/BCE, etc.
|
196
196
|
dates.map(&:qualified_value)
|
197
197
|
end
|
198
198
|
|
@@ -25,7 +25,7 @@ module ModsDisplay
|
|
25
25
|
|
26
26
|
component = ModsDisplay::ListFieldComponent.with_collection(
|
27
27
|
fields,
|
28
|
-
value_transformer: ->(value) { helpers.
|
28
|
+
value_transformer: ->(value) { helpers.format_mods_html(value.to_s) },
|
29
29
|
list_html_attributes: { class: 'mods_display_nested_related_items' },
|
30
30
|
list_item_html_attributes: { class: 'mods_display_nested_related_item open' }
|
31
31
|
)
|
@@ -4,7 +4,7 @@ module ModsDisplay
|
|
4
4
|
class Note < Field
|
5
5
|
def fields
|
6
6
|
return_fields = note_fields.map do |value|
|
7
|
-
ModsDisplay::Values.new(label: displayLabel(value) || note_label(value), values: [element_text(value)])
|
7
|
+
ModsDisplay::Values.new(label: displayLabel(value) || note_label(value), values: [element_text(value)], field: self)
|
8
8
|
end
|
9
9
|
collapse_fields(return_fields)
|
10
10
|
end
|
@@ -12,7 +12,7 @@ module ModsDisplay
|
|
12
12
|
private
|
13
13
|
|
14
14
|
def delimiter
|
15
|
-
'<br />'
|
15
|
+
'<br />'.html_safe
|
16
16
|
end
|
17
17
|
|
18
18
|
def note_fields
|
@@ -2,11 +2,12 @@
|
|
2
2
|
|
3
3
|
module ModsDisplay
|
4
4
|
class Values
|
5
|
-
attr_accessor :label, :values
|
5
|
+
attr_accessor :label, :values, :field
|
6
6
|
|
7
|
-
def initialize(label: nil, values: [])
|
7
|
+
def initialize(label: nil, values: [], field: nil)
|
8
8
|
@label = label
|
9
9
|
@values = values
|
10
|
+
@field = field
|
10
11
|
end
|
11
12
|
end
|
12
13
|
end
|
data/lib/mods_display/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mods_display
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jessie Keck
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: stanford-mods
|
@@ -245,7 +245,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
245
245
|
- !ruby/object:Gem::Version
|
246
246
|
version: '0'
|
247
247
|
requirements: []
|
248
|
-
rubygems_version: 3.
|
248
|
+
rubygems_version: 3.3.7
|
249
249
|
signing_key:
|
250
250
|
specification_version: 4
|
251
251
|
summary: The MODS Display gem allows implementers to configure a customized display
|