adiwg-mdtranslator 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/adiwg-mdtranslator.gemspec +3 -1
  3. data/bin/mdtranslator +5 -5
  4. data/lib/adiwg/mdtranslator.rb +8 -29
  5. data/lib/adiwg/mdtranslator/internal/internal_metadata_obj.rb +2 -0
  6. data/lib/adiwg/mdtranslator/readers/mdJson/mdJson_reader.rb +21 -2
  7. data/lib/adiwg/mdtranslator/readers/mdJson/modules_1.0/module_contacts.rb +5 -3
  8. data/lib/adiwg/mdtranslator/readers/mdJson/modules_1.0/module_mdJson.rb +4 -11
  9. data/lib/adiwg/mdtranslator/readers/mdJson/modules_1.0/module_metadataInfo.rb +9 -0
  10. data/lib/adiwg/mdtranslator/readers/mdJson/modules_1.0/module_resourceInfo.rb +9 -0
  11. data/lib/adiwg/mdtranslator/readers/mdJson/modules_1.0/module_responsibleParty.rb +12 -0
  12. data/lib/adiwg/mdtranslator/version.rb +6 -1
  13. data/lib/adiwg/mdtranslator/writers/html/sections/html_body.rb +7 -4
  14. data/lib/adiwg/mdtranslator/writers/html/sections/html_bodyScript.js +21 -3
  15. data/lib/adiwg/mdtranslator/writers/html/sections/html_geographicElement.rb +2 -1
  16. data/lib/adiwg/mdtranslator/writers/html/sections/html_inlineCss.css +16 -3
  17. data/lib/adiwg/mdtranslator/writers/html/sections/html_metadataInfo.rb +9 -0
  18. data/lib/adiwg/mdtranslator/writers/html/sections/html_resourceGeneral.rb +17 -1
  19. data/lib/adiwg/mdtranslator/writers/iso/classes/class_aggregateInformation.rb +5 -6
  20. data/lib/adiwg/mdtranslator/writers/iso/classes/class_citation.rb +5 -4
  21. data/lib/adiwg/mdtranslator/writers/iso/classes/class_codelist.rb +51 -0
  22. data/lib/adiwg/mdtranslator/writers/iso/classes/class_dataIdentification.rb +23 -11
  23. data/lib/adiwg/mdtranslator/writers/iso/classes/class_dataQuality.rb +4 -3
  24. data/lib/adiwg/mdtranslator/writers/iso/classes/class_date.rb +4 -3
  25. data/lib/adiwg/mdtranslator/writers/iso/classes/class_enumerationList.rb +47 -0
  26. data/lib/adiwg/mdtranslator/writers/iso/classes/class_keyword.rb +4 -3
  27. data/lib/adiwg/mdtranslator/writers/iso/classes/class_legalConstraints.rb +5 -4
  28. data/lib/adiwg/mdtranslator/writers/iso/classes/class_maintenanceInformation.rb +5 -4
  29. data/lib/adiwg/mdtranslator/writers/iso/classes/class_medium.rb +5 -6
  30. data/lib/adiwg/mdtranslator/writers/iso/classes/class_metadataExtension.rb +7 -6
  31. data/lib/adiwg/mdtranslator/writers/iso/classes/class_onlineResource.rb +4 -3
  32. data/lib/adiwg/mdtranslator/writers/iso/classes/class_responsibleParty.rb +4 -3
  33. data/lib/adiwg/mdtranslator/writers/iso/classes/class_securityConstraints.rb +4 -3
  34. data/lib/adiwg/mdtranslator/writers/iso19110/class_FCfeatureCatalogue.rb +5 -1
  35. data/lib/adiwg/mdtranslator/writers/iso19115_2/class_MImetadata.rb +17 -10
  36. data/lib/adiwg/mdtranslator/writers/iso19115_2/iso19115_2_writer.rb +1 -1
  37. metadata +19 -24
  38. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_associationType.rb +0 -47
  39. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_characterSet.rb +0 -93
  40. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_classification.rb +0 -53
  41. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_datatype.rb +0 -67
  42. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_dateType.rb +0 -44
  43. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_initiativeType.rb +0 -47
  44. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_keywordType.rb +0 -52
  45. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_maintenanceFrequency.rb +0 -61
  46. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_mediumFormat.rb +0 -50
  47. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_mediumName.rb +0 -74
  48. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_obligation.rb +0 -39
  49. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_onlineFunction.rb +0 -48
  50. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_presentationForm.rb +0 -71
  51. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_progress.rb +0 -52
  52. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_restriction.rb +0 -53
  53. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_role.rb +0 -60
  54. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_scope.rb +0 -69
  55. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_spatialRepresentationType.rb +0 -49
  56. data/lib/adiwg/mdtranslator/writers/iso/codelists/code_topicCategory.rb +0 -57
  57. data/test/readers/mdJson/v1_0/tc_reader_mdjson_responsibleParty.rb +0 -76
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1813b83d6f06fc269f456df155da5a49c0112c29
4
- data.tar.gz: 906191f4ca3c3e77999c0e8c6862adeab1869eb3
3
+ metadata.gz: 874e4c69c1bbc8d2aaf5a6754802325a65526750
4
+ data.tar.gz: e205f480b6a18acc9b0575449cb783d01397c1a7
5
5
  SHA512:
6
- metadata.gz: c9fbf80823eb3c40554a4f558134efe194bec90c6e4a6ed4d73a78752aec1e721cf79027fd412942db399c1d80583790cccb85ab83ae2334db774270c41df79d
7
- data.tar.gz: 144975542009eaa78cc12520a30a81a7a189871b3de16630aa07c46820aad5474695bf067f85312355a8d667c07c0c11ee6312129163dbdc2bdf01f7448389eb
6
+ metadata.gz: d6cfe28c5a9154da568b2e60560c72a4ae7090732570c74e5b65227f22b83d03eb777588064bb7b124dd5afeea03b5a41613174ead01811a5ec8c31809418a45
7
+ data.tar.gz: 2523859c1310086ef1a58ae9dd33288e0c38f875145617d4f13db5e4fdfc9626959869685f8b34be3c78dbec619529dc8d13d75e77bf8d383600cb907eed9532
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.authors = ["Stan Smith", "Josh Bradley"]
11
11
  spec.email = ["stansmith@usgs.gov", "joshua_bradley@fws.gov"]
12
12
  spec.summary = %q{The mdtranslator (metadata translator) is a tool for translating metadata in one format to another. The tool is written and maintained by the Alaska Data Integration Working Group (ADIwg).}
13
- spec.description = %q{The mdtranslator was written by the Alaska Data Integration Working Group (ADIwg) to assist with creating ISO 19139 metadata records. Input to the mdtranslator is simple JSON using the mdJson-schema. The mdtranslator architecture allows developers to write additional readers for other input formats and/or write additional writers for other output other than ISO 19139.}
13
+ spec.description = %q{The mdtranslator was written by the Alaska Data Integration Working Group (ADIwg) to assist with creating ISO 19139 metadata records. Input to the mdtranslator is JSON conforming to the mdJson-schema. The mdtranslator architecture allows developers to write additional readers for other input formats and/or write additional writers for other output other than ISO 19139.}
14
14
  spec.homepage = "http://www.adiwg.org/mdTranslator"
15
15
  spec.license = "UNLICENSED"
16
16
 
@@ -31,4 +31,6 @@ Gem::Specification.new do |spec|
31
31
  spec.add_runtime_dependency "uuidtools", "~> 2.1"
32
32
  spec.add_runtime_dependency "json-schema", "~> 2.4.0", "< 2.5.0"
33
33
  spec.add_runtime_dependency "adiwg-mdjson_schemas", "~> 1.0.0"
34
+ spec.add_runtime_dependency "adiwg-mdcodes", "~> 1.0"
35
+
34
36
  end
data/bin/mdtranslator CHANGED
@@ -23,13 +23,13 @@ class Mdtranslator < Thor
23
23
  # basic cli description
24
24
  desc 'translate [FILE]', %q{Pass JSON string or filename plus parameters to mdtranslator translate}
25
25
  long_desc <<-LONGDESC
26
- 'mdtranslator translate' provides command line access to the ADIWG metadata translator
27
- with options to select the input file reader, select writer output format, show empty tags
28
- in XML outputs, and choose level of validation for JSON inputs.
26
+ 'mdtranslator translate' provides command line access to the ADIWG metadata translator
27
+ with options to select the input file reader, select writer output format, show empty tags
28
+ in XML outputs, and choose level of validation for JSON inputs.
29
29
  LONGDESC
30
30
  # define cli options
31
- method_option :reader, :aliases => '-r', :desc => 'Name of reader to read your input', :default => 'mdJson'
32
- method_option :writer, :aliases => '-w', :desc => 'Name of writer to create your metadata, or leave blank to validate input only'
31
+ method_option :reader, :aliases => '-r', :desc => 'Reader to read your input metadata file', :enum => %w{mdJson}, :required => true
32
+ method_option :writer, :aliases => '-w', :desc => 'Writer to create your output metadata file, leave blank to validate input only', :enum => %w{iso19115_2 iso19110 html}
33
33
  method_option :validate, :aliases => '-v', :desc => 'Specify level of validation to be performed', :enum => %w{none normal strict}, :default => 'normal'
34
34
  method_option :showAllTags, :aliases => '-s', :desc => 'Include tags for unused attributes', :type => :boolean, :default => false
35
35
  method_option :messages, :aliases => '-m', :desc => 'On error return messages as formatted text or json object', :enum => %w{json text}, :default => 'text'
@@ -33,24 +33,6 @@ require 'adiwg/mdtranslator/writers/mdWriters'
33
33
  module ADIWG
34
34
  module Mdtranslator
35
35
 
36
- def self.addFinalMessages
37
- if $response[:readerStructurePass].nil?
38
- $response[:readerStructureMessages].insert(0, 'Input file structure was not checked \n')
39
- end
40
-
41
- if $response[:readerValidationPass].nil?
42
- $response[:readerValidationMessages].insert(0, 'Validator was not called \n')
43
- end
44
-
45
- if $response[:readerExecutionPass].nil?
46
- $response[:readerExecutionMessages].insert(0, 'Reader was not called \n')
47
- end
48
-
49
- if $response[:writerPass].nil?
50
- $response[:writerMessages].insert(0, 'Writer not called \n')
51
- end
52
- end
53
-
54
36
  def self.translate(file:, reader:, validate: 'normal', writer: nil, showAllTags: false)
55
37
 
56
38
  $showAllTags = showAllTags
@@ -80,7 +62,7 @@ module ADIWG
80
62
  # is 'false', set one or more messages to assist user fixing file schema validation
81
63
  # problems. Set by reader.
82
64
  # readerExecutionPass: 'true' if the reader completes the import of the input file into
83
- # the internal object without errors set by reader
65
+ # the internal object without errors. set by reader.
84
66
  # readerExecutionMessages: an array of quoted string messages. If readerExecutionPass is
85
67
  # 'false', set one or more messages to assist user in fixing file data problems.
86
68
  # Set by reader.
@@ -88,7 +70,7 @@ module ADIWG
88
70
  # list. if nil no write was requested and only validation of the input file will
89
71
  # be performed.
90
72
  # writerVersion: current version of the writer requested, set by writer
91
- # writerFormat: format of the output from the writer, set by writer
73
+ # writerFormat: format of the output from the writer. Set by writer.
92
74
  # writerPass: true if the writer completes the creation of the output file without errors,
93
75
  # set by writer
94
76
  # writerMessages: an array of quoted string messages. If writerPass is 'false', set one
@@ -118,20 +100,18 @@ module ADIWG
118
100
 
119
101
  # handle readers
120
102
  if reader.nil? || reader == ''
121
- $response[:readerStructureMessages] << 'Reader name is missing.'
122
- $response[:readerValidationMessages] << 'Reader name is missing.'
123
- $response[:readerExecutionMessages] << 'Reader name is missing.'
124
- $response[:writerMessages] << 'Input file was not read.'
125
- addFinalMessages()
103
+ $response[:readerExecutionPass] = false
104
+ $response[:readerExecutionMessages] << 'Reader name was not provided'
126
105
  return $response
127
106
  else
128
107
  require File.join(File.dirname(__FILE__), 'mdtranslator/readers/mdReaders')
129
108
  intObj = ADIWG::Mdtranslator::Readers.handleReader(file)
130
109
 
131
- if intObj
110
+ # if readerExecutionPass is nil no error messages were set during exection
111
+ # and the execution is assumed to have been successful
112
+ if $response[:readerExecutionPass].nil?
132
113
  $response[:readerExecutionPass] = true
133
- else
134
- addFinalMessages()
114
+ elsif !$response[:readerExecutionPass]
135
115
  return $response
136
116
  end
137
117
  end
@@ -143,7 +123,6 @@ module ADIWG
143
123
  require File.join(File.dirname(__FILE__), 'mdtranslator/writers/mdWriters')
144
124
  ADIWG::Mdtranslator::Writers.handleWriter(intObj)
145
125
  end
146
- addFinalMessages()
147
126
  return $response
148
127
 
149
128
  end
@@ -127,6 +127,7 @@ class InternalMetadata
127
127
  metadataCustodians: [],
128
128
  metadataCreateDate: {},
129
129
  metadataUpdateDate: {},
130
+ metadataCharacterSet: nil,
130
131
  metadataURI: nil,
131
132
  metadataStatus: nil,
132
133
  maintInfo: {},
@@ -168,6 +169,7 @@ class InternalMetadata
168
169
  graphicOverview: [],
169
170
  resourceFormats: [],
170
171
  resourceLanguages: [],
172
+ resourceCharacterSets: [],
171
173
  descriptiveKeywords: [],
172
174
  resourceUses: [],
173
175
  useConstraints: [],
@@ -12,6 +12,7 @@
12
12
  # Stan Smith 2014-12-01 add data dictionary
13
13
  # Stan Smith 2014-12-03 changed class name to MdJsonReader from AdiwgJsonReader
14
14
  # Stan Smith 2014-12-11 refactored to handle namespacing readers and writers
15
+ # Stan Smith 2015-06-12 added method to lookup contact in contact array
15
16
 
16
17
  require 'json'
17
18
 
@@ -51,8 +52,13 @@ module ADIWG
51
52
 
52
53
  # load mdJson file into internal object
53
54
  require readerModule('module_mdJson')
54
- intObj = $ReaderNS.unpack(@hMdJson)
55
- return intObj
55
+ # instance classes needed in script
56
+ intMetadataClass = InternalMetadata.new
57
+
58
+ # create new internal metadata container for the reader
59
+ @intObj = intMetadataClass.newBase
60
+ $ReaderNS.unpack(@intObj, @hMdJson)
61
+ return @intObj
56
62
 
57
63
  end
58
64
 
@@ -164,6 +170,19 @@ module ADIWG
164
170
  return file
165
171
  end
166
172
 
173
+ # find the array pointer for a contact
174
+ def self.findContact(contactId)
175
+ pointer = nil
176
+ i = 0
177
+ @intObj[:contacts].each do |contact|
178
+ if contact[:contactId] == contactId
179
+ pointer = i
180
+ end
181
+ i += 1
182
+ end
183
+ return pointer
184
+ end
185
+
167
186
  end
168
187
  end
169
188
  end
@@ -37,19 +37,21 @@ module ADIWG
37
37
  intCont = intMetadataClass.newContact
38
38
 
39
39
  # contact ID - required
40
- # return nil contact if contactId is '' or missing
40
+ # each contact must have a 'contactId' provided by the user
41
+ # ... the contactId is used by responsibleParty to reference a contact
42
+ # ... return nil contact if contactId is '' or missing
41
43
  if hContact.has_key?('contactId')
42
44
  s = hContact['contactId']
43
45
  if s != ''
44
46
  intCont[:contactId] = s
45
47
  else
46
48
  $response[:readerExecutionPass] = false
47
- $response[:readerExecutionMessages] << 'Contact ID is blank.'
49
+ $response[:readerExecutionMessages] << 'contact: {contactId: } is blank.'
48
50
  return nil
49
51
  end
50
52
  else
51
53
  $response[:readerExecutionPass] = false
52
- $response[:readerExecutionMessages] << 'Contact ID is missing.'
54
+ $response[:readerExecutionMessages] << 'contact: {contactId: } is missing.'
53
55
  return nil
54
56
  end
55
57
 
@@ -5,6 +5,7 @@
5
5
  # Stan Smith 2014-12-12 original script
6
6
  # Stan Smith 2014-12-15 refactored to handle namespacing readers and writers
7
7
  # Stan Smith 2015-02-17 added support for multiple data dictionaries
8
+ # Stan Smith 2015-06-12 moved instantiation of intObj up to module mdJson_reader.rb
8
9
 
9
10
  require $ReaderNS.readerModule('module_contacts')
10
11
  require $ReaderNS.readerModule('module_metadata')
@@ -16,13 +17,7 @@ module ADIWG
16
17
  module Readers
17
18
  module MdJson
18
19
 
19
- def self.unpack(hMdJson)
20
-
21
- # instance classes needed in script
22
- intMetadataClass = InternalMetadata.new
23
-
24
- # create new internal metadata container for the reader
25
- intObj = intMetadataClass.newBase
20
+ def self.unpack(intObj, hMdJson)
26
21
 
27
22
  # get json schema name and version
28
23
  hVersion = hMdJson['version']
@@ -31,8 +26,6 @@ module ADIWG
31
26
 
32
27
  # contact array
33
28
  # load the array of contacts from the json input
34
- # ... the program uses the 'contactId' provided by the user
35
- # ... to reference a contact
36
29
  if hMdJson.has_key?('contact')
37
30
  aContacts = hMdJson['contact']
38
31
  aContacts.each do |hContact|
@@ -45,14 +38,14 @@ module ADIWG
45
38
  # add default contacts
46
39
  intObj[:contacts].concat($ReaderNS::Contact.setDefaultContacts)
47
40
 
48
- # metadata
41
+ # metadata section
49
42
  # load metadata from the hash object
50
43
  if hMdJson.has_key?('metadata')
51
44
  hMetadata = hMdJson['metadata']
52
45
  intObj[:metadata] = $ReaderNS::Metadata.unpack(hMetadata)
53
46
  end
54
47
 
55
- # data dictionary
48
+ # data dictionary section
56
49
  if hMdJson.has_key?('dataDictionary')
57
50
  aDictionary = hMdJson['dataDictionary']
58
51
  aDictionary.each do |hDictionary|
@@ -8,6 +8,7 @@
8
8
  # Stan Smith 2014-09-19 changed parent metadata identifier type citation json 0.8.0
9
9
  # Stan Smith 2014-11-06 removed metadataScope, moved to resourceType under resourceInfo json 0.9.0
10
10
  # Stan Smith 2014-12-15 refactored to handle namespacing readers and writers
11
+ # Stan Smith 2015-06-12 added support for metadataCharacterSet
11
12
 
12
13
  require $ReaderNS.readerModule('module_responsibleParty')
13
14
  require $ReaderNS.readerModule('module_dateTime')
@@ -76,6 +77,14 @@ module ADIWG
76
77
  end
77
78
  end
78
79
 
80
+ # metadata - characterSet - default 'utf8'
81
+ if hMetadataInfo.has_key?('metadataCharacterSet')
82
+ s = hMetadataInfo['metadataCharacterSet']
83
+ if s != ''
84
+ intMetadataInfo[:metadataCharacterSet] = s
85
+ end
86
+ end
87
+
79
88
  # metadata - metadata URI
80
89
  if hMetadataInfo.has_key?('metadataUri')
81
90
  s = hMetadataInfo['metadataUri']
@@ -16,6 +16,7 @@
16
16
  # Stan Smith 2014-10-29 added support for resource time period
17
17
  # Stan Smith 2014-11-06 added resourceType for 0.9.0
18
18
  # Stan Smith 2014-12-15 refactored to handle namespacing readers and writers
19
+ # Stan Smith 2015-06-12 added support for resource characterSets
19
20
 
20
21
  require $ReaderNS.readerModule('module_citation')
21
22
  require $ReaderNS.readerModule('module_resourceIdentifier')
@@ -131,6 +132,14 @@ module ADIWG
131
132
  end
132
133
  end
133
134
 
135
+ # resource information - characterSet [] - default 'utf8'
136
+ if hResourceInfo.has_key?('characterSet')
137
+ aCharSet = hResourceInfo['characterSet']
138
+ aCharSet.each do |charSet|
139
+ intResInfo[:resourceCharacterSets] << charSet
140
+ end
141
+ end
142
+
134
143
  # resource information - purpose
135
144
  if hResourceInfo.has_key?('purpose')
136
145
  s = hResourceInfo['purpose']
@@ -7,6 +7,8 @@
7
7
  # ... removed resource IDs associated with contact
8
8
  # Stan Smith 2014-12-15 refactored to handle namespacing readers and writers
9
9
  # Stan Smith 2015-01-18 added nil return if hRParty empty
10
+ # Stan Smith 2015-06-12 added check that contactId for responsibleParty
11
+ # ... matches an actual contact in the contact array
10
12
 
11
13
  module ADIWG
12
14
  module Mdtranslator
@@ -30,6 +32,13 @@ module ADIWG
30
32
  s = hRParty['contactId']
31
33
  if s != ''
32
34
  intResById[:contactId] = s
35
+ if (!$ReaderNS.findContact(s))
36
+ $response[:readerExecutionPass] = false
37
+ $response[:readerExecutionMessages] << "Responsible Party contact ID #{s} does not match with any contact provided\n"
38
+ end
39
+ else
40
+ $response[:readerExecutionPass] = false
41
+ $response[:readerExecutionMessages] << 'Responsible Party is missing the contact ID\n'
33
42
  end
34
43
  end
35
44
 
@@ -38,6 +47,9 @@ module ADIWG
38
47
  s = hRParty['role']
39
48
  if s != ''
40
49
  intResById[:roleName] = s
50
+ else
51
+ $response[:readerExecutionPass] = false
52
+ $response[:readerExecutionMessages] << 'Responsible Party is missing the contact role\n'
41
53
  end
42
54
  end
43
55
 
@@ -38,11 +38,16 @@
38
38
  # ... added local names to iso 19110 writer
39
39
  # 1.0.0rc1 2015-02-27 schema 1.0 support
40
40
  # 1.1.0 2015-04-13 added html writer
41
+ # 1.2.0 2015-06-12 added mdCodes for source of codelists
42
+ # --- added comments to XML headers for citation of ADIwg
43
+ # --- added reader and writer names to CLI help
44
+ # --- added check in responsibleParty for valid contactId
45
+ # --- added characterSets to resource and metadata, updated iso19115_2 and html writers
41
46
 
42
47
  module ADIWG
43
48
  module Mdtranslator
44
49
  # current mdtranslator version
45
- VERSION = "1.1.1"
50
+ VERSION = "1.2.0"
46
51
  end
47
52
  end
48
53
 
@@ -52,12 +52,15 @@ module ADIWG
52
52
  logo = file.read
53
53
  file.close
54
54
 
55
+ # side navigation
56
+ @html.div('id'=>'sideNav') do
55
57
  # add top anchor and button
56
- @html.a(' Top', {'href'=>'#', 'class'=>'btn icon-caret-up', 'style'=>'position:fixed; bottom:6em; right:1em'})
58
+ @html.a(' Top', {'href'=>'#', 'class'=>'btn icon-caret-up'})
57
59
 
58
- # add open and close buttons
59
- @html.span(' Open',{'class'=>'btn icon-caret-down', 'style'=>'position:fixed; bottom:1em; right:1em', 'onclick'=>'openAllDetails();'})
60
- @html.span(' Close',{'class'=>'btn icon-caret-right', 'style'=>'position:fixed; bottom:3.5em; right:1em', 'onclick'=>'closeAllDetails();'})
60
+ # add open and close buttons
61
+ @html.span(' Open',{'id'=>'openAllDetails', 'class'=>'btn icon-caret-down', 'onclick'=>'openAllDetails();'})
62
+ @html.span(' Close',{'class'=>'btn icon-caret-right', 'onclick'=>'closeAllDetails();'})
63
+ end
61
64
 
62
65
  # main header
63
66
  @html.h2('id'=>'mainHeader') do
@@ -69,26 +69,34 @@ if ( typeof L === "object") {
69
69
  geoArray.forEach(function(geo, geoIdx, geoArr) {
70
70
  var json = JSON.parse(geo.textContent || geo.innerText);
71
71
  var bbox = json.bbox;
72
+
73
+ if (!json.properties) {
74
+ json.properties = {};
75
+ }
76
+
72
77
  if (json.geometry === null && bbox) {
73
78
  json.geometry = {
74
79
  "type": "Polygon",
75
80
  "coordinates": [[[bbox[2], bbox[3]], [bbox[0], bbox[3]], [bbox[0], bbox[1]], [bbox[2], bbox[1]], [bbox[2], bbox[3]]]]
76
81
  };
77
- if (!json.properties) {
78
- json.properties = {};
79
- }
80
82
  json.properties.style = {
81
83
  color: '#f00',
82
84
  fill: false
83
85
  };
84
86
  }
85
87
 
88
+ json.properties.popup = geo.getAttribute('data-popup');
86
89
  geojson.push(json);
87
90
  });
88
91
 
89
92
  var geoLayer = L.geoJson(geojson, {
90
93
  style: function(feature) {
91
94
  return feature.properties.style || {};
95
+ },
96
+ onEachFeature: function (feature, layer) {
97
+ layer.bindPopup(feature.properties.popup,{
98
+ closeButton: false
99
+ });
92
100
  }
93
101
  }).addTo(map);
94
102
 
@@ -104,6 +112,16 @@ if ( typeof L === "object") {
104
112
 
105
113
  }, map);
106
114
 
115
+ L.DomEvent.addListener(L.DomUtil.get('openAllDetails'), 'click', function() {
116
+ var me = this;
117
+ var i = 0;
118
+
119
+ setTimeout(function() {
120
+ check(i, me, bnds);
121
+ }, 100);
122
+
123
+ }, map);
124
+
107
125
  map.fitBounds(bnds);
108
126
  map.addLayer(new L.TileLayer.OSM());
109
127
  });
@@ -132,7 +132,8 @@ module ADIWG
132
132
  @html.em('GeoJSON format: ')
133
133
  @html.section(:class=>'block') do
134
134
  geoJson = AdiwgGeoFormat.internal_to_geoJson(hGeoEle)
135
- @html.div({'id'=>'geojson-' + geoPre, 'class'=>'geojson'}) do
135
+ popData = hGeoEle[:elementName] || hGeoEle[:elementDescription] || hGeoEle[:elementId]
136
+ @html.div({'id'=>'geojson-' + geoPre, 'class'=>'geojson', 'data-popup' => popData}) do
136
137
  @html.text!(geoJson)
137
138
  end
138
139
  end