mods_display 1.1.0 → 1.2.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/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
         
     |