ncbo/bioportal_web_ui

View on GitHub
app/views/layouts/_ontology_viewer.html.haml

Summary

Maintainability
Test Coverage
- content_section = (params[:p]) ? params[:p] : "summary"
- concept_title = @concept.nil? ? "" : " - #{@concept.prefLabel} - Classes"
- @title = "#{@ontology.name}#{concept_title}"

- sub = @submission_latest
- details_available = true
- if sub.nil? || (sub.respond_to?(:status) && sub.status == 404)
  - details_available = false

= render :partial =>'layouts/header'

%div#bd

  :javascript
    // Javascript History HTML5 API
    if ( typeof JSON === 'undefined' ) {
      var
        url = '/javascripts/history/json2.js',
        scriptEl = document.createElement('script');
      scriptEl.type = 'text/javascript';
      scriptEl.src = url;
      document.body.appendChild(scriptEl);
    }

    // Ontology viewer vars
    jQuery(document).data().bp.ont_viewer = {};
    jQuery(document).data().bp.ont_viewer.ontology_id = jQuery(document).data().bp.ontology.acronym;
    jQuery(document).data().bp.ont_viewer.ontology_version_id = jQuery(document).data().bp.submission_latest.submissionId;
    jQuery(document).data().bp.ont_viewer.ontology_name = "#{@ontology.name}";
    jQuery(document).data().bp.ont_viewer.org_site = "#{$ORG_SITE}";
    jQuery(document).data().bp.ont_viewer.concept_id = "#{params[:conceptid] || (@concept ? @concept.id : 'root')}";
    jQuery(document).data().bp.ont_viewer.content_section = "#{sanitize(h(content_section))}";
    jQuery(document).data().bp.ont_viewer.concept_param = "#{"conceptid=\#{params[:conceptid]}" unless params[:conceptid].nil? || params[:conceptid].empty?}";
    jQuery(document).data().bp.ont_viewer.concept_name = "#{@concept.prefLabel unless @concept.nil?}";
    jQuery(document).data().bp.ont_viewer.metadata_only = "#{@ontology.summaryOnly}";
    jQuery(document).data().bp.ont_viewer.purl_prefix = "#{(Rails.configuration.settings.purl[:enabled] ? Rails.configuration.settings.purl[:prefix]+"/"+@ontology.acronym : '')}";
    jQuery(document).data().bp.ont_viewer.concept_name_title = (jQuery(document).data().bp.ont_viewer.concept_name == "") ?
        "" : " - " + jQuery(document).data().bp.ont_viewer.concept_name;

  -# Modal dialog for creating a new mapping (must reside in a top-level position in the document to display properly).
  %div#createNewMappingModal{class: "modal fade", tabindex: "-1", "aria-labelledby": "createNewMappingLabel"}
    %div.modal-dialog.modal-lg
      %div.modal-content
        %div.modal-header
          %h4#createNewMappingLabel.modal-title
          %button.btn-close{type: "button", "data-bs-dismiss": "modal", "aria-label": "Close"}
        %div.createNewMappingModalBody.modal-body
        %div.modal-footer
          %button{type: "button", class: "btn btn-secondary", "data-bs-dismiss": "modal"} Close
          = submit_tag("Create Mapping", class: "btn btn-primary", id: "create_mapping_button")

  -# Modal dialog for getting a permanent link to a class (must reside in a top-level position in the document to display properly).
  %div#classPermalinkModal{class: "modal fade", tabindex: "-1", aria: {labelledby: "classPermalinkLabel", hidden: "true"}}
    %div.modal-dialog.modal-dialog-centered.modal-lg
      %div.modal-content
        %div.modal-header
          %h5#classPermalinkLabel.modal-title Link to this page
          %button.btn-close{type: "button", "data-bs-dismiss": "modal", "aria-label": "Close"}
        %div.modal-body
          = text_field_tag("purl_input", nil, class: "form-control")
        %div.modal-footer
          %button.btn.btn-secondary{"data-bs-dismiss": "modal"} Close

  = render partial: 'kgcl_dialogs'

  -# A header of sorts to display ontology name and subset of details.
  %div.row.pt-md-3.pb-md-2
    %div.col
      %div.ont-info-bar.rounded
        %div
          %h4
            = link_to(@ontology.name, ontology_path(@ontology.acronym))
          %div
            - if (details_available && !sub.released.nil?)
              %span.text-muted
                Last uploaded:
                = l(Date.parse(sub.creationDate), format: :monthfull_day_year)
        %div{class: 'ont-info-links d-flex gap-2'}
          - unless (@ontology.summaryOnly || @ont_restricted || @submissions.empty?)
            = link_to(@submissions.first.id + "/download?apikey=#{get_apikey}", class: 'btn btn-outline-secondary',
                      'aria-label': 'Download latest submission', title: 'Download latest submission') do
              %i.fas.fa-lg.fa-file-download{"aria-hidden": true}
          - if details_available
            - if Rails.configuration.settings.purl[:enabled]
              = link_to(@ontology.purl, class: 'btn btn-outline-secondary', 'aria-label': "#{$SITE} PURL",
                        title: "#{$SITE} PURL", target: "_blank") do
                %i.fas.fa-lg.fa-link{"aria-hidden": true}
            = link_to(sub.homepage, class: 'btn btn-outline-secondary', 'aria-label': 'Ontology homepage',
                      title: 'Ontology homepage', target: "_blank") do
              %i.fas.fa-lg.fa-home{"aria-hidden": true}
            - unless sub.documentation.nil?
              = link_to(sub.documentation, class: 'btn btn-outline-secondary', "aria-label": "Documentation",
                        title: "Documentation", target: "_blank") do
                %i.fas.fa-lg.fa-book-reader{"aria-hidden": true}
            - unless sub.publication.nil?
              = link_to(sub.publication, class: 'btn btn-outline-secondary', "aria-label": "Publications",
                        title: "Publications", target: "_blank") do
                %i.far.fa-lg.fa-newspaper{"aria-hidden": true}
          - if @ontology.admin?(session[:user])
            = link_to(edit_ontology_path(@ontology.acronym), class: 'btn btn-outline-secondary',
                      "aria-label": "Edit ontology details", title: "Edit ontology details") do
              %i.fas.fa-lg.fa-user-edit{"aria-hidden": true}

  %div.row.pb-4
    %div.col
      %div.card
        %div.card-header
          -# Tabbed navigation bar for ontology content sections
          %ul.nav.nav-tabs.card-header-tabs{id: "navbar-ontology", role: "tablist"}
            %li{class: 'nav-item', role: 'presentation'}
              = link_to("Summary", ontology_path(@ontology.acronym, p: "summary"), id: "ont-summary-tab",
                        class: "nav-link", type: 'button', role: 'tab',
                        data: {bp_ont_page: "summary", "bs-toggle": "tab", "bs-target": "#ont_summary_content"},
                        aria: {controls: "ont_summary_content", selected: "false"})
            - unless @ontology.summaryOnly
              %li{class: 'nav-item', role: 'presentation'}
                = link_to("Classes", ontology_path(@ontology.acronym, p: "classes"), id: "ont-classes-tab",
                          class: "nav-link", type: 'button', role: "tab",
                          data: {bp_ont_page: "classes", "bs-toggle": "tab", "bs-target": "#ont_classes_content"},
                          aria: {controls: "ont_classes_content", selected: "false"})
              %li{class: 'nav-item', role: 'presentation'}
                = link_to("Properties", ontology_path(@ontology.acronym, p: "properties"), id: "ont-properties-tab",
                          class: "nav-link", type: 'button', role: "tab",
                          data: {bp_ont_page: "properties", "bs-toggle": "tab", "bs-target": "#ont_properties_content"},
                          aria: {controls: "ont_properties_content", selected: "false"})
            %li{class: 'nav-item', role: 'presentation'}
              = link_to("Notes", ontology_path(@ontology.acronym, p: "notes"), id: "ont-notes-tab",
                        class: "nav-link", type: 'button', role: "tab",
                        data: {bp_ont_page: "notes", "bs-toggle": "tab", "bs-target": "#ont_notes_content"},
                        aria: {controls: "ont_notes_content", selected: "false"})
            - unless @ontology.summaryOnly
              %li{class: 'nav-item', role: 'presentation'}
                = link_to("Mappings", ontology_path(@ontology.acronym, p: "mappings"), id: "ont-mappings-tab",
                          class: "nav-link", type: 'button', role: "tab",
                          data: {bp_ont_page: "mappings", "bs-toggle": "tab", "bs-target": "#ont_mappings_content"},
                          aria: {controls: "ont_mappings_content", selected: "false"})
              %li{class: 'nav-item', role: 'presentation'}
                = link_to("Widgets", ontology_path(@ontology.acronym, p: "widgets"), id: "ont-widgets-tab",
                          class: "nav-link", type: 'button', role: "tab",
                          data: {bp_ont_page: "widgets", "bs-toggle": "tab", "bs-target": "#ont_widgets_content"},
                          aria: {controls: "ont_widgets_content", selected: "false"})
        %div.card-body
          -# Tab panes for displaying ontology content sections
          %div.tab-content{id: "ontology_content"}
            %div.tab-pane{id: "ont_summary_content", role: "tabpanel", aria: {labelledby: "ont-summary-tab"}}
              - if content_section.eql?("summary")
                = yield
            %div.tab-pane{id: "ont_classes_content", role: "tabpanel", aria: {labelledby: "ont-classes-tab"}}
              - if content_section.eql?("classes")
                = yield
            %div.tab-pane{id: "ont_properties_content", role: "tabpanel", aria: {labelledby: "ont-properties-tab"}}
              - if content_section.eql?("properties")
                = yield
            %div.tab-pane{id: "ont_notes_content", role: "tabpanel", aria: {labelledby: "ont-notes-tab"}}
              - if content_section.eql?("notes")
                = yield
            %div.tab-pane{id: "ont_mappings_content", role: "tabpanel", aria: {labelledby: "ont-mappings-tab"}}
              - if content_section.eql?("mappings")
                = yield
            %div.tab-pane{id: "ont_widgets_content", role: "tabpanel", aria: {labelledby: "ont-widgets-tab"}}
              - if content_section.eql?("widgets")
                = yield

- if Rails.env.appliance?
  </main>
  = render partial: "footer_appliance"
  = javascript_include_tag "application"
- else
  = render partial: "layouts/footer"

</body>
</html>