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.
- checksums.yaml +4 -4
- data/.eslintrc +8 -0
- data/.gitignore +1 -2
- data/.rubocop.yml +1 -0
- data/.travis.yml +7 -8
- data/Gemfile +1 -3
- data/README.md +3 -2
- data/app/assets/javascripts/geo_concerns/application.js +0 -1
- data/app/assets/javascripts/geo_concerns/bounding_box_selector.js +1 -2
- data/app/assets/javascripts/geo_concerns/es6-modules.js +7 -0
- data/app/assets/javascripts/geo_concerns/geo_concerns_boot.es6 +8 -0
- data/app/assets/javascripts/geo_concerns/relationships.js +3 -0
- data/app/assets/javascripts/geo_concerns/relationships/child_works.es6 +20 -0
- data/app/assets/javascripts/geo_concerns/relationships/parent_works.es6 +20 -0
- data/app/assets/javascripts/geo_concerns/relationships/related_works.es6 +187 -0
- data/app/assets/stylesheets/geo_concerns/related_works.scss +29 -0
- data/app/assets/stylesheets/geo_concerns/thumbnails.scss +12 -6
- data/app/helpers/geo_concerns/populate_metadata_helper.rb +7 -0
- data/app/jobs/delivery_job.rb +18 -0
- data/app/models/concerns/geo_concerns/file_set/derivatives.rb +9 -0
- data/app/models/concerns/geo_concerns/metadata_extraction_helper.rb +7 -8
- data/app/models/concerns/geo_concerns/solr_document_behavior.rb +17 -1
- data/app/presenters/geo_concerns/geo_concerns_show_presenter.rb +9 -1
- data/app/processors/geo_concerns/processors/base_geo_processor.rb +7 -7
- data/app/services/geo_concerns/delivery/geoserver.rb +64 -0
- data/app/services/geo_concerns/delivery_service.rb +11 -0
- data/app/services/geo_concerns/derivative_path.rb +1 -1
- data/app/services/geo_concerns/discovery/abstract_document.rb +4 -4
- data/app/services/geo_concerns/discovery/document_builder/basic_metadata_builder.rb +5 -12
- data/app/services/geo_concerns/discovery/document_builder/date_builder.rb +19 -8
- data/app/services/geo_concerns/discovery/document_builder/spatial_builder.rb +3 -8
- data/app/services/geo_concerns/discovery/geoblacklight_document.rb +32 -17
- data/app/views/curation_concerns/image_works/show.html.erb +1 -5
- data/app/views/curation_concerns/raster_works/_show_actions.html.erb +0 -14
- data/app/views/curation_concerns/raster_works/show.html.erb +1 -5
- data/app/views/curation_concerns/vector_works/show.html.erb +1 -5
- data/app/views/geo_concerns/_form_additional_information.html.erb +8 -8
- data/app/views/geo_concerns/_form_populate_metadata.html.erb +1 -1
- data/app/views/geo_concerns/_form_required_information.html.erb +0 -2
- data/app/views/geo_concerns/_related.html.erb +4 -0
- data/app/views/geo_concerns/file_sets/actions/_image_actions.html.erb +1 -1
- data/app/views/geo_concerns/file_sets/actions/_raster_actions.html.erb +2 -2
- data/app/views/geo_concerns/file_sets/actions/_vector_actions.html.erb +2 -2
- data/app/views/geo_concerns/related/_child_member.html.erb +13 -0
- data/app/views/geo_concerns/related/_child_works.html.erb +24 -0
- data/app/views/geo_concerns/related/_external_metadata_file_member.html.erb +8 -0
- data/app/views/geo_concerns/{_related_external_metadata_files.html.erb → related/_external_metadata_files.html.erb} +1 -2
- data/app/views/geo_concerns/{_related_geo_files.html.erb → related/_geo_files.html.erb} +0 -0
- data/app/views/geo_concerns/related/_new_child_member.html.erb +22 -0
- data/app/views/geo_concerns/related/_new_parent_member.html.erb +13 -0
- data/app/views/geo_concerns/related/_parent_member.html.erb +13 -0
- data/app/views/geo_concerns/related/_parent_works.html.erb +22 -0
- data/geo_concerns.gemspec +9 -6
- data/lib/generators/geo_concerns/install_generator.rb +10 -8
- data/lib/generators/geo_concerns/templates/config/geoserver.yml +17 -0
- data/lib/generators/geo_concerns/templates/config/locales/geo_concerns.en.yml +4 -0
- data/lib/geo_concerns/version.rb +1 -1
- data/spec/factories/collections.rb +17 -0
- data/spec/features/create_raster_work_spec.rb +5 -2
- data/spec/forms/geo_concerns/image_work_form_spec.rb +2 -2
- data/spec/helpers/geo_concerns/populate_metadata_helper_spec.rb +31 -0
- data/spec/jobs/delivery_job_spec.rb +25 -0
- data/spec/models/concerns/geo_concerns/file_set/derivatives_spec.rb +9 -0
- data/spec/models/image_work_spec.rb +1 -1
- data/spec/models/raster_work_spec.rb +1 -1
- data/spec/models/solr_document_spec.rb +2 -2
- data/spec/models/vector_work_spec.rb +1 -5
- data/spec/presenters/raster_work_show_presenter_spec.rb +22 -0
- data/spec/processors/geo_concerns/processors/base_geo_processor_spec.rb +14 -5
- data/spec/services/derivative_path_spec.rb +19 -5
- data/spec/services/geo_concerns/delivery/geoserver_spec.rb +72 -0
- data/spec/services/geo_concerns/delivery_service_spec.rb +15 -0
- data/spec/services/geo_concerns/discovery/document_builder_spec.rb +56 -38
- data/spec/services/geo_concerns/discovery/geoblacklight_document_spec.rb +7 -5
- data/template.rb +1 -1
- metadata +94 -19
- data/app/views/geo_concerns/_related_geo_works.html.erb +0 -32
- data/lib/generators/geo_concerns/templates/config/discovery/geoblacklight_schema.json +0 -168
- 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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34af069d1dd402d1592d5e24933df3362ad4bd4d
|
4
|
+
data.tar.gz: c04fb982ce925417ebeddaedbcc5052eb5ea064d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0dc13d96992a96f8d02ba4da85d00884c30e10e4d5c1f81fe507d235219f0d9d5556732212bfea956cc68696c412d9a17e0ca841bf14cc00e2ffab95b9591591
|
7
|
+
data.tar.gz: a33e2ed33523ebb633749a2bfe2056f9bbb8225b3d26c69580c3789044d2cacf332e693ee27a454b386fcbf7ab66c8a218fdfb75d24182803dce8b5fccddb497
|
data/.eslintrc
ADDED
data/.gitignore
CHANGED
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
|
-
|
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.
|
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://
|
3
|
-
[![Coverage Status](https://
|
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
|
|
@@ -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,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,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
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
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
|
}
|