class ADIWG::Mdtranslator::Writers::Html::Html_Body

Public Class Methods

new(html) click to toggle source
# File lib/adiwg/mdtranslator/writers/html/sections/html_body.rb, line 30
def initialize(html)
   @html = html
end

Public Instance Methods

writeHtml(version, intObj) click to toggle source
# File lib/adiwg/mdtranslator/writers/html/sections/html_body.rb, line 34
def writeHtml(version, intObj)
   @html.body do

      # classes used
      metaInfoClass = Html_MetadataInfo.new(@html)
      contactClass = Html_Contact.new(@html)
      resourceClass = Html_ResourceInfo.new(@html)
      lineageClass = Html_Lineage.new(@html)
      distributionClass = Html_Distribution.new(@html)
      associatedClass = Html_AssociatedResource.new(@html)
      additionalClass = Html_AdditionalDocumentation.new(@html)
      fundingClass = Html_Funding.new(@html)
      dictionaryClass = Html_DataDictionary.new(@html)
      repositoryClass = Html_Repository.new(@html)

      # make sections of the internal data store convenient
      hSchema = intObj[:schema]
      aContacts = intObj[:contacts]
      hMetaInfo = intObj[:metadata][:metadataInfo]
      hResourceInfo = intObj[:metadata][:resourceInfo]
      aLineage = intObj[:metadata][:lineageInfo]
      aDistribution = intObj[:metadata][:distributorInfo]
      aAssociated = intObj[:metadata][:associatedResources]
      aAdditional = intObj[:metadata][:additionalDocuments]
      aFunding = intObj[:metadata][:funding]
      aDictionaries = intObj[:dataDictionaries]
      aRepositories = intObj[:metadataRepositories]

      # set page title and logo
      # side navigation
      @html.div('id' => 'sideNav') do

         # add section buttons
         @html.a(' Top', {'href' => '#', 'class' => 'btn'})
         @html.a(' Contacts', {'href' => '#body-contacts', 'class' => 'btn navBtn', 'id' => 'contactButton'})
         @html.a(' Metadata', {'href' => '#body-metadataInfo', 'class' => 'btn navBtn', 'id' => 'metadataButton'})
         @html.a(' Resource', {'href' => '#body-resourceInfo', 'class' => 'btn navBtn', 'id' => 'resourceButton'})
         @html.a(' Lineage', {'href' => '#body-lineage', 'class' => 'btn navBtn', 'id' => 'lineageButton'})
         @html.a(' Distribution', {'href' => '#body-distribution', 'class' => 'btn navBtn', 'id' => 'distributionButton'})
         @html.a(' Associated', {'href' => '#body-associatedResource', 'class' => 'btn navBtn', 'id' => 'associatedButton'})
         @html.a(' Additional', {'href' => '#body-additionalDocument', 'class' => 'btn navBtn', 'id' => 'additionalButton'})
         @html.a(' Dictionary', {'href' => '#body-dataDictionary', 'class' => 'btn navBtn', 'id' => 'dictionaryButton'})
         @html.a(' Funding', {'href' => '#body-funding', 'class' => 'btn navBtn', 'id' => 'fundingButton'})
         @html.a(' Repository', {'href' => '#body-repository', 'class' => 'btn navBtn', 'id' => 'repositoryButton'})

         # add open and close buttons
         @html.span(' Open', {'class' => 'btn icon-caret-down', 'id' => 'openAllButton'})
         @html.span(' Close', {'class' => 'btn icon-caret-right', 'id' => 'closeAllButton'})

      end

      # main header
      @html.h2('id' => 'mainHeader') do
         # added blank to span tag to force builder to create closing tag
         @html.span('', 'id' => 'logo')
         @html.span('Metadata Record')
         @html.span('HTML5', 'class' => 'version')
      end

      # report title
      # aShortVersion = version.split('.')
      # shortVersion = aShortVersion[0].to_s + '.' + aShortVersion[1].to_s
      @html.h1('mdTranslator ' + version + ' HTML Metadata Record', 'id' => 'mdtranslator-metadata-report')

      # resource citation title
      unless hResourceInfo.empty?
         unless hResourceInfo[:citation].empty?
            unless hResourceInfo[:citation][:title].nil?
               @html.h2(hResourceInfo[:citation][:title])
            end
         end
      end

      # report date
      @html.section(:class => 'block') do
         @html.em('Report Generated:')
         @html.text!(Time.new.inspect)
      end

      # metadata source
      @html.h3('Metadata Source', 'id' => 'metadataSource')
      @html.section(:class => 'block') do
         @html.em('Metadata schema:')
         @html.text!(hSchema[:name])
         @html.br

         @html.em('Schema version:')
         @html.text!(hSchema[:version])
      end
      @html.hr

      # contacts [] section
      unless aContacts.empty?
         @html.details do
            @html.summary('Contacts', {'id' => 'body-contacts', 'class' => 'h2'})
            @html.section(:class => 'block') do
               aContacts.each do |hContact|
                  @html.section(:class => 'block') do
                     contactClass.writeHtml(hContact)
                  end
               end
               @html.hr
            end
         end
      end

      # metadata information section
      unless hMetaInfo.empty?
         @html.details do
         @html.summary('Metadata Information', {'id' => 'body-metadataInfo', 'class' => 'h2'})
         @html.section(:class => 'block') do
               @html.section(:class => 'block') do
                  metaInfoClass.writeHtml(hMetaInfo)
               end
            end
            @html.hr
         end
      end

      # resource information section
      unless hResourceInfo.empty?
         @html.details do
            @html.summary('Resource Information', {'id' => 'body-resourceInfo', 'class' => 'h2'})
            @html.section(:class => 'block') do
               resourceClass.writeHtml(hResourceInfo)
            end
            @html.hr
         end
      end

      # lineage section
      unless aLineage.empty?
         @html.details do
            @html.summary('Resource Lineage', {'id' => 'body-lineage', 'class' => 'h2'})
            @html.section(:class => 'block') do
               aLineage.each do |hLineage|
                  @html.details do
                     @html.summary('Lineage', {'class' => 'h3'})
                     @html.section(:class => 'block') do
                        lineageClass.writeHtml(hLineage)
                     end
                  end
               end
            end
            @html.hr
         end
      end

      # distribution section
      unless aDistribution.empty?
         @html.details do
            @html.summary('Resource Distribution', {'id' => 'body-distribution', 'class' => 'h2'})
            @html.section(:class => 'block') do
               aDistribution.each do |hDistribution|
                  @html.details do
                     @html.summary('Distribution', {'class' => 'h3'})
                     @html.section(:class => 'block') do
                        distributionClass.writeHtml(hDistribution)
                     end
                  end
               end
            end
            @html.hr
         end
      end

      # associated resource section
      unless aAssociated.empty?
         @html.details do
            @html.summary('Associated Resources', {'id' => 'body-associatedResource', 'class' => 'h2'})
            @html.section(:class => 'block') do
               aAssociated.each do |hAssociated|
                  @html.details do
                     @html.summary('Resource', {'class' => 'h3'})
                     @html.section(:class => 'block') do
                        associatedClass.writeHtml(hAssociated)
                     end
                  end
               end
            end
            @html.hr
         end
      end

      # additional documentation section
      unless aAdditional.empty?
         @html.details do
            @html.summary('Additional Documentation', {'id' => 'body-additionalDocument', 'class' => 'h2'})
            @html.section(:class => 'block') do
               aAdditional.each do |hAdditional|
                  @html.details do
                     @html.summary('Document', {'class' => 'h3'})
                     @html.section(:class => 'block') do
                        additionalClass.writeHtml(hAdditional)
                     end
                  end
               end
            end
            @html.hr
         end
      end

      # data dictionary section
      unless aDictionaries.empty?
         @html.details do
            @html.summary('Data Dictionaries', {'id' => 'body-dataDictionary', 'class' => 'h2'})
            @html.section(:class => 'block') do
               aDictionaries.each do |hDictionary|
                  @html.details do
                     @html.summary('Dictionary', {'class' => 'h3'})
                     @html.section(:class => 'block') do
                        dictionaryClass.writeHtml(hDictionary)
                     end
                  end
               end
            end
         end
      end

      # funding section
      unless aFunding.empty?
         @html.details do
            @html.summary('Funding', {'id' => 'body-funding', 'class' => 'h2'})
            @html.section(:class => 'block') do
               aFunding.each do |hFunding|
                  @html.details do
                     @html.summary('Funds', {'class' => 'h3'})
                     @html.section(:class => 'block') do
                        fundingClass.writeHtml(hFunding)
                     end
                  end
               end
            end
         end
      end

      # metadata repository section
      unless aRepositories.empty?
         @html.details do
            @html.summary('Metadata Repositories', {'id' => 'body-repository', 'class' => 'h2'})
            @html.section(:class => 'block') do
               aRepositories.each do |hRepository|
                  @html.details do
                     @html.summary('Repository', {'class' => 'h3'})
                     @html.section(:class => 'block') do
                        repositoryClass.writeHtml(hRepository)
                     end
                  end
               end
            end
         end
      end

      # load leaflet
      @html.link( :rel => 'stylesheet', :href => 'https://unpkg.com/leaflet@1.0.3/dist/leaflet.css')
      @html.script('', :src => 'https://unpkg.com/leaflet@1.0.3/dist/leaflet.js')
      @html.script('', :src => 'https://stamen-maps.a.ssl.fastly.net/js/tile.stamen.js')

      # add inline javascript
      # read javascript from file
      path = File.join(File.dirname(__FILE__), 'html_bodyScript.js')
      file = File.open(path, 'r')
      bodyJS = file.read
      file.close

      @html.script('type'=>'text/javascript') do
         @html << bodyJS
      end

   end # body
end