SpeciesFileGroup/taxonworks

View on GitHub
app/helpers/annotations_helper.rb

Summary

Maintainability
A
1 hr
Test Coverage
# Helpers that wrap sets of annotations of different types.
module AnnotationsHelper

  # @return Hash
  # Models name as key, annotator names as Array of values
  #   see /metadata/annotators.json
  def klass_annotations
    j = {}
    ::Project::MANIFEST.sort.each do |m|
      k = m.safe_constantize
      if k.respond_to?(:available_annotation_types)
        j[k.name] = k.available_annotation_types
      end
    end

    # Community classes that can be referenced in Filters 
    # at minimum need to be here
    j.merge!(
      'Source' => Source.available_annotation_types
    )

    j
  end

  # @return [String]
  # Assumes the context is the object, not a multi-object summary
  def annotations_summary_tag(object)
    v = [confidence_list_tag(object),
         citation_list_tag(object),
         identifier_list_tag(object),
         data_attribute_list_tag(object),
         note_list_tag(object),
         tag_list_tag(object),
         alternate_values_list_tag(object),
         attribution_list_tag(object)
    ].compact

    tag.div(class: %w{item panel separate-bottom}) do
      tag.div(class: [:content]) do
        tag.div(class: ['information-panel']) do
          tag.h2('Annotations') +
            ( v.count > 0 ?  tag.div(v.join.html_safe, class: :annotations_summary_list, 'data-annotator-list-object-id' => object.id) : tag.em('None'))
        end
      end
    end

    # depictions
    # confidences
    # protocols
  end

  def annotations_exist(object)
    return (object.has_citations? && object.citations.any?) ||
      (object.has_identifiers? && object.identifiers.visible(sessions_current_project_id).any?) ||
      (object.has_data_attributes? && object.data_attributes.any?) ||
      (object.has_notes? && object.notes.any?) ||
      (object.has_tags? && object.tags.load.any?) ||
      (object.has_alternate_values? && object.alternate_values.any?) ||
      (object.has_confidences? && object.confidences.any?) ||
      (object.has_attribution? && object.attribution)
  end

  def annotation_id(object)
    "annotation_anchor_#{object.metamorphosize.class.name}_#{object.id}"
  end

  def radial_annotator(object, pulse = false, showCount = false)
    content_tag(:div, '', data: { 'global-id' => object.to_global_id.to_s, 'radial-annotator' => 'true', 'show-count' => showCount, 'pulse' => pulse })
  end

  # @return [Array]
  #   of { ClassName => human name }
  def klass_and_labels(klass_names)
    klass_names.collect{|n| [n, n.tableize.humanize]}.to_h
  end

end