geo_concerns 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc +8 -0
  3. data/.gitignore +1 -2
  4. data/.rubocop.yml +1 -0
  5. data/.travis.yml +7 -8
  6. data/Gemfile +1 -3
  7. data/README.md +3 -2
  8. data/app/assets/javascripts/geo_concerns/application.js +0 -1
  9. data/app/assets/javascripts/geo_concerns/bounding_box_selector.js +1 -2
  10. data/app/assets/javascripts/geo_concerns/es6-modules.js +7 -0
  11. data/app/assets/javascripts/geo_concerns/geo_concerns_boot.es6 +8 -0
  12. data/app/assets/javascripts/geo_concerns/relationships.js +3 -0
  13. data/app/assets/javascripts/geo_concerns/relationships/child_works.es6 +20 -0
  14. data/app/assets/javascripts/geo_concerns/relationships/parent_works.es6 +20 -0
  15. data/app/assets/javascripts/geo_concerns/relationships/related_works.es6 +187 -0
  16. data/app/assets/stylesheets/geo_concerns/related_works.scss +29 -0
  17. data/app/assets/stylesheets/geo_concerns/thumbnails.scss +12 -6
  18. data/app/helpers/geo_concerns/populate_metadata_helper.rb +7 -0
  19. data/app/jobs/delivery_job.rb +18 -0
  20. data/app/models/concerns/geo_concerns/file_set/derivatives.rb +9 -0
  21. data/app/models/concerns/geo_concerns/metadata_extraction_helper.rb +7 -8
  22. data/app/models/concerns/geo_concerns/solr_document_behavior.rb +17 -1
  23. data/app/presenters/geo_concerns/geo_concerns_show_presenter.rb +9 -1
  24. data/app/processors/geo_concerns/processors/base_geo_processor.rb +7 -7
  25. data/app/services/geo_concerns/delivery/geoserver.rb +64 -0
  26. data/app/services/geo_concerns/delivery_service.rb +11 -0
  27. data/app/services/geo_concerns/derivative_path.rb +1 -1
  28. data/app/services/geo_concerns/discovery/abstract_document.rb +4 -4
  29. data/app/services/geo_concerns/discovery/document_builder/basic_metadata_builder.rb +5 -12
  30. data/app/services/geo_concerns/discovery/document_builder/date_builder.rb +19 -8
  31. data/app/services/geo_concerns/discovery/document_builder/spatial_builder.rb +3 -8
  32. data/app/services/geo_concerns/discovery/geoblacklight_document.rb +32 -17
  33. data/app/views/curation_concerns/image_works/show.html.erb +1 -5
  34. data/app/views/curation_concerns/raster_works/_show_actions.html.erb +0 -14
  35. data/app/views/curation_concerns/raster_works/show.html.erb +1 -5
  36. data/app/views/curation_concerns/vector_works/show.html.erb +1 -5
  37. data/app/views/geo_concerns/_form_additional_information.html.erb +8 -8
  38. data/app/views/geo_concerns/_form_populate_metadata.html.erb +1 -1
  39. data/app/views/geo_concerns/_form_required_information.html.erb +0 -2
  40. data/app/views/geo_concerns/_related.html.erb +4 -0
  41. data/app/views/geo_concerns/file_sets/actions/_image_actions.html.erb +1 -1
  42. data/app/views/geo_concerns/file_sets/actions/_raster_actions.html.erb +2 -2
  43. data/app/views/geo_concerns/file_sets/actions/_vector_actions.html.erb +2 -2
  44. data/app/views/geo_concerns/related/_child_member.html.erb +13 -0
  45. data/app/views/geo_concerns/related/_child_works.html.erb +24 -0
  46. data/app/views/geo_concerns/related/_external_metadata_file_member.html.erb +8 -0
  47. data/app/views/geo_concerns/{_related_external_metadata_files.html.erb → related/_external_metadata_files.html.erb} +1 -2
  48. data/app/views/geo_concerns/{_related_geo_files.html.erb → related/_geo_files.html.erb} +0 -0
  49. data/app/views/geo_concerns/related/_new_child_member.html.erb +22 -0
  50. data/app/views/geo_concerns/related/_new_parent_member.html.erb +13 -0
  51. data/app/views/geo_concerns/related/_parent_member.html.erb +13 -0
  52. data/app/views/geo_concerns/related/_parent_works.html.erb +22 -0
  53. data/geo_concerns.gemspec +9 -6
  54. data/lib/generators/geo_concerns/install_generator.rb +10 -8
  55. data/lib/generators/geo_concerns/templates/config/geoserver.yml +17 -0
  56. data/lib/generators/geo_concerns/templates/config/locales/geo_concerns.en.yml +4 -0
  57. data/lib/geo_concerns/version.rb +1 -1
  58. data/spec/factories/collections.rb +17 -0
  59. data/spec/features/create_raster_work_spec.rb +5 -2
  60. data/spec/forms/geo_concerns/image_work_form_spec.rb +2 -2
  61. data/spec/helpers/geo_concerns/populate_metadata_helper_spec.rb +31 -0
  62. data/spec/jobs/delivery_job_spec.rb +25 -0
  63. data/spec/models/concerns/geo_concerns/file_set/derivatives_spec.rb +9 -0
  64. data/spec/models/image_work_spec.rb +1 -1
  65. data/spec/models/raster_work_spec.rb +1 -1
  66. data/spec/models/solr_document_spec.rb +2 -2
  67. data/spec/models/vector_work_spec.rb +1 -5
  68. data/spec/presenters/raster_work_show_presenter_spec.rb +22 -0
  69. data/spec/processors/geo_concerns/processors/base_geo_processor_spec.rb +14 -5
  70. data/spec/services/derivative_path_spec.rb +19 -5
  71. data/spec/services/geo_concerns/delivery/geoserver_spec.rb +72 -0
  72. data/spec/services/geo_concerns/delivery_service_spec.rb +15 -0
  73. data/spec/services/geo_concerns/discovery/document_builder_spec.rb +56 -38
  74. data/spec/services/geo_concerns/discovery/geoblacklight_document_spec.rb +7 -5
  75. data/template.rb +1 -1
  76. metadata +94 -19
  77. data/app/views/geo_concerns/_related_geo_works.html.erb +0 -32
  78. data/lib/generators/geo_concerns/templates/config/discovery/geoblacklight_schema.json +0 -168
  79. data/lib/generators/geo_concerns/templates/jobs/characterize_job.rb +0 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 255bdd173366bc1acb75b272d840a49da4880844
4
- data.tar.gz: 785b290a3b6d94dd1d972b7c7e1e42cbd5e2f2ca
3
+ metadata.gz: 34af069d1dd402d1592d5e24933df3362ad4bd4d
4
+ data.tar.gz: c04fb982ce925417ebeddaedbcc5052eb5ea064d
5
5
  SHA512:
6
- metadata.gz: 69859a3c2e3909cbefc8f48d6acf52c6a781d18163744f2d9d1bb81e688fcdb0fbb782f85b58fcca2c5a8a3edf0ce7afb9e05298b0b126b6228f07a56eda277e
7
- data.tar.gz: f205a24f9e51d3dcbd47a1fe803d2d0a530b98f3cd370a9c878ddc5a8045ad723d1043c559037ab8ab83fea06dfbc53acaa5a0b6daf1a03646e1a215baf09e86
6
+ metadata.gz: 0dc13d96992a96f8d02ba4da85d00884c30e10e4d5c1f81fe507d235219f0d9d5556732212bfea956cc68696c412d9a17e0ca841bf14cc00e2ffab95b9591591
7
+ data.tar.gz: a33e2ed33523ebb633749a2bfe2056f9bbb8225b3d26c69580c3789044d2cacf332e693ee27a454b386fcbf7ab66c8a218fdfb75d24182803dce8b5fccddb497
data/.eslintrc ADDED
@@ -0,0 +1,8 @@
1
+ // Use this file as a starting point for your project's .eslintrc.
2
+ // Copy this file, and add rule overrides as needed.
3
+ {
4
+ "extends": "airbnb",
5
+ "env": {
6
+ "jquery": true
7
+ }
8
+ }
data/.gitignore CHANGED
@@ -8,7 +8,6 @@ test/dummy/tmp/
8
8
  test/dummy/.sass-cache
9
9
 
10
10
  .internal_test_app
11
- fcrepo4-data
11
+ fcrepo4*-data
12
12
  Gemfile.lock
13
13
  coverage
14
- fcrepo4-test-data/
data/.rubocop.yml CHANGED
@@ -32,6 +32,7 @@ Metrics/LineLength:
32
32
  - 'app/models/concerns/georeferenced_behavior.rb'
33
33
  - 'app/models/solr_document.rb'
34
34
  - 'app/schemas/geo_concerns/basic_geo_metadata_required.rb'
35
+ - 'app/services/geo_concerns/discovery/geoblacklight_document.rb'
35
36
  - 'config/**/*.rb'
36
37
  - 'app/values/geo_concerns/coverage.rb'
37
38
  - 'app/values/geo_concerns/time_period.rb'
data/.travis.yml CHANGED
@@ -1,27 +1,26 @@
1
1
  language: ruby
2
+ cache: bundler
2
3
  sudo: true
3
4
  rvm:
4
- - 2.2.2 # oldest version supported by Rails 5
5
5
  - 2.3.1 # latest release
6
+ jdk:
7
+ - oraclejdk8
6
8
  env:
7
9
  global:
8
10
  - NOKOGIRI_USE_SYSTEM_LIBRARIES=true
9
11
  - MAPNIK_VERSION="2.3"
10
12
  matrix:
11
- - RAILS_VERSION=4.2.7
13
+ - RAILS_VERSION=4.2.7.1
12
14
  RDF_VERSION=1.99.1
13
- - RAILS_VERSION=5.0.0
15
+ - RAILS_VERSION=5.0.0.1
14
16
  RDF_VERSION=2.1.0
15
17
  before_install:
16
18
  - sudo apt-add-repository --yes ppa:mapnik/nightly-${MAPNIK_VERSION}
17
19
  - sudo apt-get update -y
18
- install:
19
- - sudo apt-get -y install wget build-essential make libmapnik=${MAPNIK_VERSION}* mapnik-utils=${MAPNIK_VERSION}* libmapnik-dev=${MAPNIK_VERSION}* mapnik-input-plugin*=${MAPNIK_VERSION}*
20
+ - sudo apt-get -y install libmapnik=${MAPNIK_VERSION}* mapnik-utils=${MAPNIK_VERSION}* libmapnik-dev=${MAPNIK_VERSION}* mapnik-input-plugin*=${MAPNIK_VERSION}*
21
+ install: bundle install --jobs=3 --retry=3
20
22
  before_script:
21
- - jdk_switcher use oraclejdk8
22
23
  - gdalinfo --version
23
- - gem install bundler -v 1.12.3
24
- - bundle install
25
24
  services:
26
25
  - redis-server
27
26
  addons:
data/Gemfile CHANGED
@@ -13,7 +13,7 @@ group :development, :test do
13
13
  end
14
14
 
15
15
  # BEGIN ENGINE_CART BLOCK
16
- # engine_cart: 0.10.0
16
+ # engine_cart: 1.0.0
17
17
  # engine_cart stanza: 0.10.0
18
18
  # the below comes from engine_cart, a gem used to test this Rails engine gem in the context of a Rails app.
19
19
  file = File.expand_path('Gemfile', ENV['ENGINE_CART_DESTINATION'] || ENV['RAILS_ROOT'] || File.expand_path('.internal_test_app', File.dirname(__FILE__)))
@@ -46,5 +46,3 @@ else
46
46
  end
47
47
  end
48
48
  # END ENGINE_CART BLOCK
49
-
50
- gem 'rails-controller-testing' if !ENV['RAILS_VERSION'] || ENV['RAILS_VERSION'] =~ /^5\./
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # Geo Concerns
2
- [![Build Status](https://travis-ci.org/projecthydra-labs/geo_concerns.svg?branch=master)](https://travis-ci.org/projecthydra-labs/geo_concerns)
3
- [![Coverage Status](https://coveralls.io/repos/github/projecthydra-labs/geo_concerns/badge.svg?branch=master)](https://coveralls.io/github/projecthydra-labs/geo_concerns?branch=master)
2
+ [![Build Status](https://img.shields.io/travis/projecthydra-labs/geo_concerns/master.svg)](https://travis-ci.org/projecthydra-labs/geo_concerns)
3
+ [![Coverage Status](https://img.shields.io/coveralls/projecthydra-labs/geo_concerns/master.svg)](https://coveralls.io/github/projecthydra-labs/geo_concerns?branch=master)
4
4
  [![API Docs](http://img.shields.io/badge/API-docs-blue.svg)](http://www.rubydoc.info/github/projecthydra-labs/geo_concerns)
5
5
  [![Gem Version](https://img.shields.io/gem/v/geo_concerns.svg)](https://github.com/projecthydra-labs/geo_concerns/releases)
6
+ [![Slack Status](http://slack.projecthydra.org/badge.svg)](https://project-hydra.slack.com/messages/geomodeling/)
6
7
 
7
8
  Rails application for developing Hydra Geo models. Built around Curation Concerns engine.
8
9
 
@@ -2,4 +2,3 @@
2
2
  //= require geo_concerns/leaflet-boundingbox
3
3
  //= require geo_concerns/Control.Geocoder
4
4
  //= require geo_concerns/bounding_box_selector
5
- //= require_tree .
@@ -8,6 +8,7 @@ function boundingBoxSelector(options) {
8
8
 
9
9
  if (coverage) {
10
10
  initialBounds = coverageToBounds(coverage);
11
+ updateBboxInputs(initialBounds);
11
12
  } else {
12
13
  initialBounds = L.latLngBounds([[-50, -100], [72, 100]]);
13
14
  };
@@ -18,8 +19,6 @@ function boundingBoxSelector(options) {
18
19
  scrollWheelZoom: false
19
20
  }).fitBounds(initialBounds);
20
21
 
21
- updateBboxInputs(initialBounds);
22
-
23
22
  L.tileLayer('https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png', {
24
23
  maxZoom: 18
25
24
  }).addTo(map);
@@ -0,0 +1,7 @@
1
+ //= require geo_concerns/geo_concerns_boot
2
+ //= require geo_concerns/relationships
3
+
4
+ Blacklight.onLoad(function() {
5
+ Initializer = require('geo_concerns/geo_concerns_boot')
6
+ window.gc = new Initializer()
7
+ })
@@ -0,0 +1,8 @@
1
+ import ChildWorks from "geo_concerns/relationships/child_works"
2
+ import ParentWorks from "geo_concerns/relationships/parent_works"
3
+ export default class Initializer {
4
+ constructor() {
5
+ this.child_works = new ChildWorks('#child-works')
6
+ this.parent_works = new ParentWorks('#parent-works')
7
+ }
8
+ }
@@ -0,0 +1,3 @@
1
+ //= require geo_concerns/relationships/related_works
2
+ //= require geo_concerns/relationships/child_works
3
+ //= require geo_concerns/relationships/parent_works
@@ -0,0 +1,20 @@
1
+ import RelatedWorks from 'geo_concerns/relationships/related_works';
2
+
3
+ /**
4
+ * Provides functionality to add and remove child works.
5
+ */
6
+ export default class ChildWorks extends RelatedWorks {
7
+ /**
8
+ * Builds form data string for ordered_member_ids.
9
+ * @param {Array} array of ordered member ids
10
+ */
11
+ buildFormData(ids) {
12
+ let data;
13
+ if (ids.length === 0) {
14
+ data = `${this.paramKey}[ordered_member_ids][]=`;
15
+ } else {
16
+ data = ids.map((id) => `${this.paramKey}[ordered_member_ids][]=${id}`).join('&');
17
+ }
18
+ return data;
19
+ }
20
+ }
@@ -0,0 +1,20 @@
1
+ import RelatedWorks from 'geo_concerns/relationships/related_works';
2
+
3
+ /**
4
+ * Provides functionality to add and remove parent works.
5
+ */
6
+ export default class ParentWorks extends RelatedWorks {
7
+ /**
8
+ * Builds form data string for in_works_ids.
9
+ * @param {Array} array of parent member ids
10
+ */
11
+ buildFormData(ids) {
12
+ let data;
13
+ if (ids.length === 0) {
14
+ data = `${this.paramKey}[in_works_ids][]=`;
15
+ } else {
16
+ data = ids.map((id) => `${this.paramKey}[in_works_ids][]=${id}`).join('&');
17
+ }
18
+ return data;
19
+ }
20
+ }
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Provides basic functionality to add and remove member works.
3
+ * Adapted from the table.es6 module in https://github.com/projecthydra/sufia
4
+ */
5
+ export default class RelatedWorks {
6
+ constructor(element) {
7
+ this.element = $(element);
8
+ this.table = this.element.find('table');
9
+ this.query_url = this.table.data('query-url');
10
+ if (!this.query_url) {
11
+ return;
12
+ }
13
+ this.members = this.table.data('members');
14
+ this.works = this.table.find('tr');
15
+ this.workIds = Array.from(this.works.map((i) => this.works.eq(i).data('work-id')));
16
+ this.paramKey = this.table.data('param-key');
17
+ this.bindButtons();
18
+ }
19
+
20
+ /**
21
+ * Bind buttons to member works table.
22
+ */
23
+ bindButtons() {
24
+ const $this = this;
25
+ $this.bindAddButton();
26
+ $this.bindRemoveButton();
27
+ }
28
+
29
+ /**
30
+ * Handle click events by the "Add" button in the table, setting a warning
31
+ * message if the input is empty or calling the server to handle the request
32
+ */
33
+ bindAddButton() {
34
+ const $this = this;
35
+ $this.element.find('.btn-add-row').click(() => {
36
+ const $row = $this.element.find('.member-actions');
37
+ const memberId = $this.element.find('input').val();
38
+ const updatedMembers = $this.members.slice();
39
+ if (memberId === '') {
40
+ $this.setWarningMessage($row, 'ID cannot be empty.');
41
+ } else if ($.inArray(memberId, $this.workIds) > -1) {
42
+ $this.setWarningMessage($row, 'Work is already related.');
43
+ } else {
44
+ updatedMembers.push(memberId);
45
+ $this.hideWarningMessage($row);
46
+ $this.callAjax({
47
+ row: $row,
48
+ members: updatedMembers,
49
+ member: memberId,
50
+ url: $this.query_url,
51
+ data: $this.buildFormData(updatedMembers),
52
+ on_error: $this.handleError,
53
+ on_success: $this.handleAddRowSuccess,
54
+ });
55
+ }
56
+ });
57
+ }
58
+
59
+ /**
60
+ * Handle click events by the "Remove" buttons in the table, and calling the
61
+ * server to handle the request
62
+ */
63
+ bindRemoveButton() {
64
+ const $this = this;
65
+ $this.element.find('.btn-remove-row').click(function removeButton() {
66
+ const $row = $(this).parents('tr:first');
67
+ const memberId = $row.data('work-id');
68
+ const index = $this.members.indexOf(memberId);
69
+ const updatedMembers = $this.members.slice();
70
+ updatedMembers.splice(index, 1);
71
+ $this.callAjax({
72
+ row: $row,
73
+ members: updatedMembers,
74
+ member: memberId,
75
+ data: $this.buildFormData(updatedMembers),
76
+ url: $this.query_url,
77
+ on_error: $this.handleError,
78
+ on_success: $this.handleRemoveRowSuccess,
79
+ });
80
+ });
81
+ }
82
+
83
+ /**
84
+ * Builds form data strings.
85
+ * @param {Array} array of ids
86
+ */
87
+ buildFormData(ids) {
88
+ return ids;
89
+ }
90
+
91
+ /**
92
+ * Set the warning message related to the appropriate row in the table
93
+ * @param {jQuery} row the row containing the warning message to display
94
+ * @param {String} message the warning message text to set
95
+ */
96
+ setWarningMessage(row, message) {
97
+ const $this = this;
98
+ $this.element.find('.message.has-warning').text(message).removeClass('hidden');
99
+ }
100
+
101
+ /**
102
+ * Hide the warning message on the appropriate row
103
+ * @param {jQuery} row the row containing the warning message to hide
104
+ */
105
+ hideWarningMessage(row) {
106
+ const $this = this;
107
+ $this.element.find('.message.has-warning').addClass('hidden');
108
+ }
109
+
110
+ /**
111
+ * Call the server, then call the appropriate callbacks to handle success and errors
112
+ * @param {Object} args the table, row, input, url, and callbacks
113
+ */
114
+ callAjax(args) {
115
+ const $this = this;
116
+ $.ajax({
117
+ type: 'patch',
118
+ url: args.url,
119
+ dataType: 'json',
120
+ data: args.data,
121
+ })
122
+ .done(() => {
123
+ args.on_success.call($this, args);
124
+ })
125
+ .fail((jqxhr) => {
126
+ args.on_error.call($this, args, jqxhr);
127
+ });
128
+ }
129
+
130
+ /**
131
+ * Reloads the child works tables after ajax call for member work.
132
+ * Rebinds the add and remove buttons to the updated table.
133
+ */
134
+ reloadTable() {
135
+ const $this = this;
136
+ $this.element.load(`${$this.query_url} div#${this.element[0].id}`, () => {
137
+ $this.bindButtons();
138
+ });
139
+ }
140
+
141
+ /**
142
+ * Set a warning message to alert the user on an error
143
+ * @param {Object} args the table, row, input, url, and callbacks
144
+ * @param {Object} jqxhr the jQuery XHR response object
145
+ */
146
+ handleError(args, jqxhr) {
147
+ let message = jqxhr.statusText;
148
+ if (jqxhr.responseJSON) {
149
+ message = jqxhr.responseJSON.description;
150
+ }
151
+ this.setWarningMessage(args.row, message);
152
+ }
153
+
154
+ /**
155
+ * Update list of child work ids and list of members. Reload the
156
+ * table from the server.
157
+ * @param {Object} args the table, row, input, url, and callbacks
158
+ */
159
+ handleRemoveRowSuccess(args) {
160
+ // update list of child member works
161
+ const index = this.workIds.indexOf(args.member);
162
+ this.workIds.splice(index, 1);
163
+
164
+ // update master list of member works
165
+ this.members = args.members;
166
+
167
+ this.reloadTable();
168
+ }
169
+
170
+ /**
171
+ * Update list of child work ids and list of members.
172
+ * Clear the add row input and reload the table from the server.
173
+ * @param {Object} args the table, row, input, url, and callbacks
174
+ */
175
+ handleAddRowSuccess(args) {
176
+ // update list of child member works
177
+ this.workIds.push(args.member);
178
+
179
+ // update master list of member works
180
+ this.members = args.members;
181
+
182
+ // empty the "add" row input value
183
+ this.element.find('input').val('');
184
+
185
+ this.reloadTable();
186
+ }
187
+ }
@@ -0,0 +1,29 @@
1
+ #child-works, #parent-works {
2
+ table {
3
+ tbody {
4
+ td { border-top: none; }
5
+ tr { border-bottom: 1px solid #ddd; }
6
+ }
7
+ }
8
+ .panel { margin-bottom: 0px; }
9
+ .row { margin: 10px 0 10px 0; }
10
+ .message {
11
+ background-size: 40px 40px;
12
+ background-image: linear-gradient(135deg, rgba(255, 255, 255, .05) 25%, transparent 25%,
13
+ transparent 50%, rgba(255, 255, 255, .05) 50%, rgba(255, 255, 255, .05) 75%,
14
+ transparent 75%, transparent);
15
+ box-shadow: inset 0 -1px 0 rgba(255,255,255,.4);
16
+ width: 100%;
17
+ border: 1px solid;
18
+ color: #fff;
19
+ padding: 10px;
20
+ text-shadow: 0 1px 0 rgba(0,0,0,.5);
21
+ animation: animate-bg 5s linear infinite;
22
+ border-radius: 4px;
23
+ margin-top: 10px;
24
+ }
25
+ .has-warning{
26
+ background-color: #eaaf51;
27
+ border-color: #d99a36;
28
+ }
29
+ }
@@ -1,7 +1,13 @@
1
- .thumbnail a > img {
2
- display: block;
3
- height: auto;
4
- margin-right: 0px;
5
- margin-left: 0px;
6
- max-width: 250px;
1
+ .thumbnail {
2
+ max-width: 200px;
3
+ border: none;
4
+ background-color: transparent;
5
+ a > img {
6
+ display: block;
7
+ height: auto;
8
+ margin-right: 0px;
9
+ margin-left: 0px;
10
+ max-height: 150px;
11
+ max-width: 200px;
12
+ }
7
13
  }
@@ -0,0 +1,7 @@
1
+ module GeoConcerns
2
+ module PopulateMetadataHelper
3
+ def external_metadata_file_presenters
4
+ GeoConcernsShowPresenter.new(curation_concern, nil).external_metadata_file_set_presenters
5
+ end
6
+ end
7
+ end