# HTML writer # html body # History: # Stan Smith 2015-03-23 original script # Stan Smith 2014-04-10 add open and close buttons # Stan Smith 2015-07-16 refactored to remove global namespace $HtmlNS # Stan Smith 2015-07-20 moved mdTranslator logo to html_inlineCss.css require_relative 'html_metadataInfo' require_relative 'html_resourceInfo' require_relative 'html_dataDictionary' require_relative 'html_distributor' require_relative 'html_associatedResource' require_relative 'html_additionalDocumentation' module ADIWG module Mdtranslator module Writers module Html class MdHtmlBody def initialize(html) @html = html end def writeHtml(intObj) @html.body do # classes used htmlMetaInfo = MdHtmlMetadataInfo.new(@html) htmlResInfo = MdHtmlResourceInfo.new(@html) htmlDataD = MdHtmlDataDictionary.new(@html) htmlDist = MdHtmlDistributor.new(@html) htmlAssRes = MdHtmlAssociatedResource.new(@html) htmlAddDoc = MdHtmlAdditionalDocumentation.new(@html) # make sections of the internal data store more accessible hMetadata = intObj[:metadata] aDataDict = intObj[:dataDictionary] hMetaInfo = intObj[:metadata][:metadataInfo] aDistributor = intObj[:metadata][:distributorInfo] aAssRes = intObj[:metadata][:associatedResources] aAddDocs = intObj[:metadata][:additionalDocuments] # set page title and logo # side navigation @html.div('id'=>'sideNav') do # add top anchor and button @html.a(' Top', {'href'=>'#', 'class'=>'btn icon-caret-up'}) # add open and close buttons @html.span(' Open',{'id'=>'openAllDetails', 'class'=>'btn icon-caret-down', 'onclick'=>'openAllDetails();'}) @html.span(' Close',{'class'=>'btn icon-caret-right', 'onclick'=>'closeAllDetails();'}) 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 Report') @html.span('HTML','class'=>'version') end # report title @html.h1('mdTranslator Metadata Report', 'id'=>'mdtranslator-metadata-report') # section index @html.section(:class=>'block') do @html.h3('Page Index') @html.a('Metadata Information Section','href'=>'#metadataInfo') @html.section(:class=>'block') do if !hMetaInfo.empty? unless hMetaInfo[:metadataId].empty? @html.a('Metadata Identifier', 'href'=>'#metadata-identifier') @html.br end @html.a('Metadata Record Information', 'href'=>'#metadata-recordInfo') unless hMetaInfo[:parentMetadata].empty? @html.br @html.a('Parent Metadata Citation', 'href'=>'#metadata-parentInfo') end end end @html.a('Resource Information Section','href'=>'#resourceInfo') @html.section(:class=>'block') do @html.a('Resource Identification', 'href'=>'#resourceInfo-general') @html.br @html.a('Contacts', 'href'=>'#resourceInfo-contacts') unless hMetadata[:resourceInfo][:descriptiveKeywords].empty? @html.br @html.a('Keywords', 'href'=>'#resourceInfo-keywords') end unless hMetadata[:resourceInfo][:taxonomy].empty? @html.br @html.a('Taxonomy', 'href'=>'#resourceInfo-taxonomy') end unless hMetadata[:resourceInfo][:spatialReferenceSystem].empty? && hMetadata[:resourceInfo][:spatialRepresentationTypes].empty? && hMetadata[:resourceInfo][:spatialResolutions].empty? @html.br @html.a('Spatial Reference', 'href'=>'#resourceInfo-spatialRef') end unless hMetadata[:resourceInfo][:extents].empty? @html.br @html.a('Extents (Geographic, Temporal, & Vertical Space)', 'href'=>'#resourceInfo-extents') end unless hMetadata[:resourceInfo][:gridInfo].empty? @html.br @html.a('Grid Information', 'href'=>'#resourceInfo-gridInfo') end unless hMetadata[:resourceInfo][:coverageInfo].empty? @html.br @html.a('Coverage Information', 'href'=>'#resourceInfo-coverageInfo') end unless hMetadata[:resourceInfo][:dataQualityInfo].empty? @html.br @html.a('Data Quality', 'href'=>'#resourceInfo-dataQuality') end unless hMetadata[:resourceInfo][:useConstraints].empty? && hMetadata[:resourceInfo][:legalConstraints].empty? && hMetadata[:resourceInfo][:securityConstraints].empty? @html.br @html.a('Constraints', 'href'=>'#resourceInfo-constraints') end unless hMetadata[:resourceInfo][:resourceMaint].empty? @html.br @html.a('Maintenance Information', 'href'=>'#resourceInfo-maintInfo') end @html.br @html.a('Other Resource Information', 'href'=>'#resourceInfo-other') end @html.a('Data Dictionary Section','href'=>'#dataDictionary') @html.br @html.a('Resource Distribution Section','href'=>'#resourceDistribution') @html.br @html.a('Associated Resources Section','href'=>'#associatedResource') @html.br @html.a('Additional Documentation Section','href'=>'#additionalDocuments') end @html.hr # metadata source @html.h2('Metadata Source', 'id'=>'metadata-source') @html.section(:class=>'block') do @html.em('Metadata schema:') @html.text!(intObj[:schema][:name]) @html.br @html.em('Schema version:') @html.text!(intObj[:schema][:version]) end @html.hr # metadata information section @html.h2('Metadata Information', 'id'=>'metadataInfo') if !hMetaInfo.empty? @html.section(:class=>'block') do htmlMetaInfo.writeHtml(hMetaInfo) end end @html.hr # resource information section @html.h2('Resource Information', 'id'=>'resourceInfo') @html.section(:class=>'block') do htmlResInfo.writeHtml(hMetadata[:resourceInfo]) end @html.hr # data dictionary section @html.h2('Data Dictionary', 'id'=>'dataDictionary') aDataDict.each do |hDictionary| @html.section(:class=>'block') do # get dictionary title from the citation sTitle = hDictionary[:dictionaryInfo][:dictCitation][:citTitle] @html.details do @html.summary(sTitle, {'class'=>'h3'}) @html.section(:class=>'block') do htmlDataD.writeHtml(hDictionary) end end end end @html.hr # resource distribution section @html.h2('Resource Distribution', 'id'=>'resourceDistribution') aDistributor.each do |hDistributor| @html.section(:class=>'block') do # get distributor name from contact orgName contId = hDistributor[:distContact][:contactId] hCont = ADIWG::Mdtranslator::Writers::Html::MdHtmlWriter.getContact(contId) distName = hCont[:orgName] if distName.nil? distName = 'Other' end @html.details do @html.summary(distName, {'class'=>'h3'}) @html.section(:class=>'block') do htmlDist.writeHtml(hDistributor) end end end end @html.hr # associated resource section @html.h2('Associated Resources', 'id'=>'associatedResource') aAssRes.each do |hAssRes| @html.section(:class=>'block') do # get document title from the citation hCitation = hAssRes[:resourceCitation] if !hCitation.empty? sTitle = hCitation[:citTitle] else sTitle = 'Resource' end @html.details do @html.summary(sTitle, {'class'=>'h4'}) @html.section(:class=>'block') do htmlAssRes.writeHtml(hAssRes) end end end end @html.hr # additional documentation section @html.h2('Additional Documentation', 'id'=>'additionalDocuments') aAddDocs.each do |hAddDoc| @html.section(:class=>'block') do # get document title from the citation sTitle = hAddDoc[:citation][:citTitle] @html.details do @html.summary(sTitle, {'class'=>'h4'}) @html.section(:class=>'block') do htmlAddDoc.writeHtml(hAddDoc) end end end end @html.hr #Load leaflet @html.link( :rel => 'stylesheet', :href => 'http://cdn.leafletjs.com/leaflet/v0.7.7/leaflet.css') @html.script('', :src => 'http://cdn.leafletjs.com/leaflet/v0.7.7/leaflet.js') @html.script('', :src => 'http://maps.stamen.com/js/tile.stamen.js?v1.3.0') # add inline javascript # read javascript from file path = File.join(File.dirname(__FILE__), 'html_bodyScript.js') file = File.open(path, 'r') js = file.read file.close @html.script('type'=>'text/javascript') do @html << js end end # body end # def writeHtml end # class end end end end