geoblacklight 0.3.4 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitmodules +0 -5
- data/.travis.yml +3 -0
- data/README.md +24 -76
- data/Rakefile +2 -3
- data/app/assets/javascripts/geoblacklight/downloaders.js +1 -0
- data/app/assets/javascripts/geoblacklight/downloaders/downloader.js +51 -0
- data/app/assets/javascripts/geoblacklight/downloaders/hgl_downloader.js +32 -0
- data/app/assets/javascripts/geoblacklight/modules/download.js +7 -41
- data/app/controllers/download_controller.rb +19 -1
- data/app/controllers/wms_controller.rb +1 -1
- data/app/views/catalog/_show_sidebar.html.erb +25 -13
- data/app/views/download/hgl.html.erb +25 -0
- data/config/locales/geoblacklight.en.yml +1 -0
- data/lib/generators/geoblacklight/install_generator.rb +3 -2
- data/lib/generators/geoblacklight/templates/geoblacklight.js +1 -0
- data/lib/geoblacklight.rb +2 -0
- data/lib/geoblacklight/constants.rb +2 -1
- data/lib/geoblacklight/download/hgl_download.rb +17 -0
- data/lib/geoblacklight/engine.rb +1 -0
- data/lib/geoblacklight/solr_document.rb +4 -0
- data/lib/geoblacklight/version.rb +1 -1
- data/lib/geoblacklight/wms_layer.rb +31 -31
- data/lib/geoblacklight/wms_layer/feature_info_response.rb +26 -24
- data/lib/tasks/geoblacklight.rake +2 -2
- data/spec/controllers/download_controller_spec.rb +13 -2
- data/spec/features/download_layer_spec.rb +18 -3
- data/spec/features/home_page_spec.rb +3 -3
- data/spec/features/layer_preview_spec.rb +3 -3
- data/spec/features/split_view.html.erb_spec.rb +2 -4
- data/spec/fixtures/solr_documents/actual-papermap1.json +26 -0
- data/spec/fixtures/solr_documents/actual-point1.json +27 -0
- data/spec/fixtures/solr_documents/actual-polygon1.json +26 -0
- data/spec/fixtures/solr_documents/actual-raster1.json +44 -0
- data/spec/fixtures/{test-dct-references6.json → solr_documents/harvard_raster.json} +2 -6
- data/spec/fixtures/solr_documents/public_iiif_princeton.json +38 -0
- data/spec/fixtures/solr_documents/public_polygon_mit.json +47 -0
- data/spec/fixtures/solr_documents/restricted-line.json +43 -0
- data/spec/lib/geoblacklight/download/hgl_download_spec.rb +14 -0
- data/spec/lib/geoblacklight/solr_document_spec.rb +20 -0
- data/spec/lib/geoblacklight/wms_layer/feature_info_response_spec.rb +5 -5
- data/spec/lib/geoblacklight/wms_layer_spec.rb +4 -4
- metadata +25 -22
- data/spec/features/dct_references_spec.rb +0 -77
- data/spec/fixtures/test-dct-references1.json +0 -38
- data/spec/fixtures/test-dct-references2.json +0 -41
- data/spec/fixtures/test-dct-references3.json +0 -45
- data/spec/fixtures/test-dct-references4.json +0 -60
- data/spec/fixtures/test-dct-references5.json +0 -57
- data/spec/fixtures/test-dct-references7.json +0 -42
- data/spec/fixtures/test-dct-references8.json +0 -46
- data/spec/support/dct_references_generate.rb +0 -100
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 969739fdc56829f296f49fdc519cfcd57cdafd7c
|
4
|
+
data.tar.gz: 5e1c94e9c07557e959e787727130109289c5261f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bdbc61dc63defcf0b47ede1f235db3498ebaaa6c0c71e31acde2a3f089cf69ef4975f3ec59aad0d19fc3c16d983d04b01c9025dc112430821cf80665d82d48d4
|
7
|
+
data.tar.gz: b707a45223963f466216cc1b8e4180ebcc1a5175e55c9dc70d30bc028dac7a16e5a2e451c4eb8afb128f807b60a32bb6af87285c4cec7b867d02b71ff8020c8c
|
data/.gitmodules
CHANGED
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -6,88 +6,29 @@ GeoBlacklight is a world-class discovery platform for geospatial (GIS) holdings.
|
|
6
6
|
is an open collaborative project aiming to build off of the successes
|
7
7
|
of the Blacklight Solr-powered discovery interface and the
|
8
8
|
multi-institutional OpenGeoportal federated metadata sharing
|
9
|
-
communities. We
|
10
|
-
we're actively looking for community input and development partners.
|
11
|
-
More coming soon!
|
9
|
+
communities. We're actively looking for community input and development partners.
|
12
10
|
|
13
|
-
|
11
|
+
###[Installation](https://github.com/geoblacklight/geoblacklight/wiki/Installation)
|
14
12
|
|
15
|
-
|
16
|
-
* Facet by institution, year, publisher, data type, access, format
|
17
|
-
* Facet by place, subject
|
18
|
-
* Sort by relevance, year, publisher, title
|
19
|
-
* Results list view icons and snippets
|
20
|
-
* Detail map view for WMS features
|
21
|
-
* Detail map view feature inspection
|
22
|
-
* Slugs
|
23
|
-
* Results list map view of bounding boxes
|
24
|
-
* WMS/WFS/WCS links
|
25
|
-
* Download Shapefile
|
26
|
-
* Download KML
|
27
|
-
* Download Metadata (for Stanford)
|
28
|
-
* Built-in sample Solr 4.10 index
|
29
|
-
* Search history
|
13
|
+
Creating a new GeoBlacklight application from the template
|
30
14
|
|
31
|
-
|
15
|
+
```
|
16
|
+
$ rails new app-name -m https://raw.githubusercontent.com/geoblacklight/geoblacklight/master/template.rb
|
17
|
+
```
|
32
18
|
|
33
|
-
|
34
|
-
* See https://github.com/geoblacklight/geoblacklight-schema/issues
|
19
|
+
To install Solr (with Jetty)
|
35
20
|
|
36
|
-
|
21
|
+
```
|
22
|
+
$ cd app-name
|
23
|
+
$ rake jetty:download
|
24
|
+
$ rake jetty:unzip
|
25
|
+
$ rake geoblacklight:configure_jetty
|
26
|
+
```
|
37
27
|
|
38
|
-
|
28
|
+
Or install with [Docker](https://github.com/geoblacklight/geoblacklight-docker)
|
29
|
+
For more information see the [installation guide](https://github.com/geoblacklight/geoblacklight/wiki/Installation)
|
39
30
|
|
40
|
-
|
41
|
-
|
42
|
-
git clone --recurse git@github.com:geoblacklight/geoblacklight.git
|
43
|
-
|
44
|
-
Download and configure `jetty` to run Solr
|
45
|
-
|
46
|
-
rake jetty:download jetty:unzip
|
47
|
-
rake geoblacklight:configure_jetty
|
48
|
-
|
49
|
-
Create a test app (created at `/spec/internal`)
|
50
|
-
|
51
|
-
rake engine_cart:generate
|
52
|
-
|
53
|
-
Boot `jetty`
|
54
|
-
|
55
|
-
rake jetty:start
|
56
|
-
|
57
|
-
Boot GeoBlacklight test app
|
58
|
-
|
59
|
-
cd spec/internal
|
60
|
-
rake geoblacklight:solr:seed # to load sample documents into jetty Solr instance
|
61
|
-
rails server
|
62
|
-
|
63
|
-
Run tests
|
64
|
-
|
65
|
-
rake ci
|
66
|
-
|
67
|
-
## Installation
|
68
|
-
|
69
|
-
To bootstrap a new GeoBlacklight Rails application
|
70
|
-
|
71
|
-
$ rails new app-name -m https://raw.githubusercontent.com/geoblacklight/geoblacklight/master/template.rb
|
72
|
-
|
73
|
-
To install Solr (with jetty)
|
74
|
-
|
75
|
-
$ cd app-name
|
76
|
-
$ rake jetty:download
|
77
|
-
$ rake jetty:unzip
|
78
|
-
$ rake geoblacklight:configure_jetty
|
79
|
-
|
80
|
-
|
81
|
-
## Usage
|
82
|
-
|
83
|
-
For a non-development instance:
|
84
|
-
|
85
|
-
1. Populate a Solr 4.7 index with geoblacklight-schema documents
|
86
|
-
2. Configure your GeoBlacklight application's `config/solr.yml` to point to the Solr index
|
87
|
-
3. Configure your `config/environments` and `app/controllers/catalog_controller.rb`
|
88
|
-
4. `rails server` to run GeoBlacklight
|
89
|
-
|
90
|
-
## Contributing
|
31
|
+
###[Contributing](https://github.com/geoblacklight/geoblacklight/wiki/Contributing)
|
91
32
|
|
92
33
|
1. Fork it ( http://github.com/my-github-username/geoblacklight/fork )
|
93
34
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
@@ -95,4 +36,11 @@ For a non-development instance:
|
|
95
36
|
4. Push to the branch (`git push origin my-new-feature`)
|
96
37
|
5. Create new Pull Request
|
97
38
|
|
98
|
-
Also, if you wish to ask questions or participate further, email the [GeoBlacklight Working Group](https://groups.google.com/forum/#!forum/geoblacklight-working-group) at geoblacklight-working-group@googlegroups.com.
|
39
|
+
Also, if you wish to ask questions or participate further, email the [GeoBlacklight Working Group](https://groups.google.com/forum/#!forum/geoblacklight-working-group) at [geoblacklight-working-group@googlegroups.com](mailto:geoblacklight-working-group@googlegroups.com).
|
40
|
+
|
41
|
+
###[Development](https://github.com/geoblacklight/geoblacklight/wiki/Development)
|
42
|
+
|
43
|
+
See the [development guide](https://github.com/geoblacklight/geoblacklight/wiki/Development) on our wiki for more information about setting up your development environment.
|
44
|
+
|
45
|
+
|
46
|
+
Please see the full documentation hosted on our Wiki [Wiki](https://github.com/geoblacklight/geoblacklight/wiki)
|
data/Rakefile
CHANGED
@@ -43,8 +43,7 @@ end
|
|
43
43
|
namespace :geoblacklight do
|
44
44
|
desc "Copies the default SOLR config for the bundled Testing Server"
|
45
45
|
task :configure_jetty do
|
46
|
-
|
47
|
-
|
48
|
-
end
|
46
|
+
system 'curl -o jetty/solr/blacklight-core/conf/schema.xml https://raw.githubusercontent.com/geoblacklight/geoblacklight-schema/master/conf/schema.xml'
|
47
|
+
system 'curl -o jetty/solr/blacklight-core/conf/solrconfig.xml https://raw.githubusercontent.com/geoblacklight/geoblacklight-schema/master/conf/solrconfig.xml'
|
49
48
|
end
|
50
49
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
//= require_tree ./downloaders
|
@@ -0,0 +1,51 @@
|
|
1
|
+
!(function(global) {
|
2
|
+
'use strict';
|
3
|
+
|
4
|
+
var Downloader = L.Class.extend({
|
5
|
+
options: {
|
6
|
+
spinner: $('<i class="fa fa-spinner fa-spin fa-2x fa-align-center"></i>')
|
7
|
+
},
|
8
|
+
|
9
|
+
initialize: function(el, options) {
|
10
|
+
L.Util.setOptions(this, options);
|
11
|
+
this.$el = $(el);
|
12
|
+
this.configureHandler();
|
13
|
+
},
|
14
|
+
|
15
|
+
configureHandler: function() {
|
16
|
+
this.$el.on('click', L.Util.bind(this.download, this));
|
17
|
+
},
|
18
|
+
|
19
|
+
download: function(ev) {
|
20
|
+
var url = this.$el.data('downloadPath');
|
21
|
+
ev.preventDefault();
|
22
|
+
this.$el.closest('.btn-group').append(this.options.spinner);
|
23
|
+
$.getJSON(url)
|
24
|
+
.done(L.Util.bind(this.complete, this))
|
25
|
+
.fail(L.Util.bind(this.error, this));
|
26
|
+
},
|
27
|
+
|
28
|
+
complete: function(data) {
|
29
|
+
this.renderMessage(data);
|
30
|
+
this.options.spinner.hide();
|
31
|
+
},
|
32
|
+
|
33
|
+
error: function(data) {
|
34
|
+
this.options.spinner.hide();
|
35
|
+
},
|
36
|
+
|
37
|
+
renderMessage: function(message) {
|
38
|
+
$.each(message, function(idx, msg) {
|
39
|
+
var flash = '<div class="alert alert-' + msg[0] + '"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>' + msg[1] + '</div>';
|
40
|
+
$('div.flash_messages').append(flash);
|
41
|
+
});
|
42
|
+
}
|
43
|
+
|
44
|
+
});
|
45
|
+
|
46
|
+
global.GeoBlacklight.Downloader = Downloader;
|
47
|
+
global.GeoBlacklight.downloader = function(el, options) {
|
48
|
+
return new Downloader(el, options);
|
49
|
+
};
|
50
|
+
|
51
|
+
})(this);
|
@@ -0,0 +1,32 @@
|
|
1
|
+
//= require geoblacklight/downloaders/downloader
|
2
|
+
|
3
|
+
!(function(global) {
|
4
|
+
'use strict';
|
5
|
+
|
6
|
+
var HglDownloader = global.GeoBlacklight.Downloader.extend({
|
7
|
+
|
8
|
+
configureHandler: function() {
|
9
|
+
this.$el.on('submit', L.Util.bind(this.download, this));
|
10
|
+
},
|
11
|
+
|
12
|
+
download: function(ev) {
|
13
|
+
var url, email;
|
14
|
+
ev.preventDefault();
|
15
|
+
$(this.options.modal).modal('hide');
|
16
|
+
email = this.$el.find('#requestEmail').val();
|
17
|
+
url = this.$el.find('#requestUrl').val();
|
18
|
+
|
19
|
+
$.get(url, { email: email })
|
20
|
+
.done(L.Util.bind(this.complete, this))
|
21
|
+
.fail(L.Util.bind(this.error, this));
|
22
|
+
}
|
23
|
+
|
24
|
+
});
|
25
|
+
|
26
|
+
global.GeoBlacklight.HglDownloader = HglDownloader;
|
27
|
+
global.GeoBlacklight.hglDownloader = function(el, options) {
|
28
|
+
return new HglDownloader(el, options);
|
29
|
+
};
|
30
|
+
|
31
|
+
|
32
|
+
})(this);
|
@@ -1,45 +1,11 @@
|
|
1
1
|
Blacklight.onLoad(function() {
|
2
|
-
var downloads = [];
|
3
2
|
$('[data-download-path]').each(function(i, element) {
|
4
|
-
|
3
|
+
GeoBlacklight.downloader(element);
|
5
4
|
});
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
_this.element = $(element);
|
11
|
-
_this.url = _this.element.data('download-path');
|
12
|
-
_this.buttonGroup = _this.element.closest('.btn-group');
|
13
|
-
_this.spinner = $('<i class="fa fa-spinner fa-spin fa-2x fa-align-center"></i>');
|
14
|
-
_this.buttonGroup.append(_this.spinner.hide());
|
15
|
-
_this.setupClickListener();
|
16
|
-
};
|
17
|
-
|
18
|
-
GeoBlacklight.Download.prototype = {
|
19
|
-
setupClickListener: function() {
|
20
|
-
var _this = this;
|
21
|
-
_this.element.on('click', function(e) {
|
22
|
-
e.preventDefault();
|
23
|
-
_this.requestDownload();
|
24
|
-
});
|
25
|
-
},
|
26
|
-
requestDownload: function() {
|
27
|
-
var _this = this;
|
28
|
-
_this.spinner.show();
|
29
|
-
$.ajax({
|
30
|
-
url: _this.url,
|
31
|
-
dataType: 'json'
|
32
|
-
}).done(function(data) {
|
33
|
-
_this.renderFlashMessage(data);
|
34
|
-
_this.spinner.hide();
|
35
|
-
}).fail(function(data, e) {
|
36
|
-
_this.spinner.hide();
|
37
|
-
});
|
38
|
-
},
|
39
|
-
renderFlashMessage: function(response) {
|
40
|
-
$.each(response, function(i, val) {
|
41
|
-
var flashHtml = '<div class="alert alert-' + val[0] + '"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>' + val[1] + '</div>';
|
42
|
-
$('div.flash_messages').append(flashHtml);
|
5
|
+
$('#ajax-modal').on('loaded.blacklight.ajax-modal', function() {
|
6
|
+
var modal = this;
|
7
|
+
$(this).find('#hglRequest').each(function() {
|
8
|
+
GeoBlacklight.hglDownloader(this, { modal: modal });
|
43
9
|
});
|
44
|
-
}
|
45
|
-
};
|
10
|
+
});
|
11
|
+
});
|
@@ -19,6 +19,24 @@ class DownloadController < ApplicationController
|
|
19
19
|
send_file "tmp/cache/downloads/#{params[:id]}.#{params[:format]}", type: 'application/zip', x_sendfile: true
|
20
20
|
end
|
21
21
|
|
22
|
+
def hgl
|
23
|
+
@response, @document = get_solr_response_for_doc_id
|
24
|
+
if params[:email]
|
25
|
+
response = HglDownload.new(@document, params[:email]).get
|
26
|
+
if response.nil?
|
27
|
+
flash[:danger] = t 'geoblacklight.download.error'
|
28
|
+
else
|
29
|
+
flash[:success] = t 'geoblacklight.download.hgl_success'
|
30
|
+
end
|
31
|
+
respond_to do |format|
|
32
|
+
format.json { render json: flash, response: response }
|
33
|
+
format.html { render json: flash, response: response }
|
34
|
+
end
|
35
|
+
else
|
36
|
+
render layout: false
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
22
40
|
private
|
23
41
|
|
24
42
|
def check_type
|
@@ -49,7 +67,7 @@ class DownloadController < ApplicationController
|
|
49
67
|
authenticate_user!
|
50
68
|
end
|
51
69
|
end
|
52
|
-
|
70
|
+
|
53
71
|
def file_name_to_id(file_name)
|
54
72
|
file_name.split('-')[0..-2].join('-')
|
55
73
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
<div id='geoblacklight-tools'>
|
4
4
|
<div class="panel panel-default show-tools">
|
5
|
-
<div class="panel-heading">
|
5
|
+
<div class="panel-heading">
|
6
6
|
Tools
|
7
7
|
</div>
|
8
8
|
<div class="panel-body">
|
@@ -13,12 +13,16 @@
|
|
13
13
|
<%- end -%>
|
14
14
|
<%- if @document.respond_to?( :to_sms_text ) -%>
|
15
15
|
<%= link_to sms_helper, sms_catalog_path(:id => @document), {:id => 'smsLink', :data => {:ajax_modal => "trigger"}, :class => 'list-group-item'} %>
|
16
|
-
<%- end -%>
|
16
|
+
<%- end -%>
|
17
17
|
</ul>
|
18
18
|
<% if document_downloadable? %>
|
19
19
|
<div class='btn-group' itemprop='distribution' itemscope='itemscope' itemtype='http://schema.org/DataDownload'>
|
20
|
-
<%
|
20
|
+
<% if document.direct_download.present? %>
|
21
21
|
<%= link_to(download_text(@document[:dc_format_s]), document.direct_download[:download], class: 'btn btn-default', 'contentUrl' => document.direct_download[:download]) %>
|
22
|
+
<% elsif document.hgl_download.present? %>
|
23
|
+
<%= link_to(download_text(document.download_types.first[0]),
|
24
|
+
download_hgl_path(id: document), data: {ajax_modal: 'trigger'},
|
25
|
+
class: 'btn btn-default') %>
|
22
26
|
<% else %>
|
23
27
|
<%= link_to(download_text(document.download_types.first[0]), '', data: { download_path: "#{download_path(document[:layer_slug_s], type: document.download_types.first[0])}"}, class: 'btn btn-default') %>
|
24
28
|
<% end %>
|
@@ -27,20 +31,28 @@
|
|
27
31
|
<span class='sr-only'>Toggle Download Dropdown</span>
|
28
32
|
</button>
|
29
33
|
<ul class='dropdown-menu' role='menu'>
|
30
|
-
<%
|
34
|
+
<% if document.hgl_download.present? %>
|
31
35
|
<li role="presentation" class="dropdown-header">Original</li>
|
32
36
|
<li>
|
33
|
-
<%= link_to(download_text(
|
37
|
+
<%= link_to(download_text(document.download_types.first[0]),
|
38
|
+
download_hgl_path(id: document), data: {ajax_modal: 'trigger'}) %>
|
34
39
|
</li>
|
35
|
-
<%
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
40
|
+
<% else %>
|
41
|
+
<% if document.direct_download.present? %>
|
42
|
+
<li role="presentation" class="dropdown-header">Original</li>
|
43
|
+
<li>
|
44
|
+
<%= link_to(download_text(@document[:dc_format_s]), document.direct_download[:download], 'contentUrl' => document.direct_download[:download]) %>
|
45
|
+
</li>
|
46
|
+
<% end %>
|
47
|
+
<% if document.download_types.present? %>
|
48
|
+
<li role="presentation" class="dropdown-header">Generated</li>
|
49
|
+
<% document.download_types.each do |type| %>
|
50
|
+
<%= content_tag(:li) do %>
|
51
|
+
<% link_to(download_text(type[0]), '', data: { download_path: "#{download_path(document[:layer_slug_s], type: type[0])}" }) %>
|
52
|
+
<% end %>
|
41
53
|
<% end %>
|
42
|
-
<% end %>
|
43
|
-
<% end %>
|
54
|
+
<% end %>
|
55
|
+
<% end %>
|
44
56
|
</ul>
|
45
57
|
</div>
|
46
58
|
<% elsif document.restricted? && document.same_institution? %>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<div class="modal-header">
|
2
|
+
<button type="button" class="close" data-dismiss="modal">
|
3
|
+
<span aria-hidden="true">×</span>
|
4
|
+
</button>
|
5
|
+
<h4 class="modal-title">Request Layer</h4>
|
6
|
+
</div>
|
7
|
+
<div class="modal-body">
|
8
|
+
<form class="form-horizontal" role="form" id="hglRequest">
|
9
|
+
<p>Please enter your email address. You will receive a link to download the layer when it is ready.</p>
|
10
|
+
<div class="form-group">
|
11
|
+
<label for="requestEmail" class="col-sm-2 control-label">Email</label>
|
12
|
+
<div class="col-sm-6">
|
13
|
+
<input class="form-control" type="email" id="requestEmail" />
|
14
|
+
</div>
|
15
|
+
<input type="hidden" id="requestUrl"
|
16
|
+
value="<%= download_hgl_path(id: @document) %>" />
|
17
|
+
<div class="col-sm-2">
|
18
|
+
<button type="submit" class="btn btn-primary">Request</button>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
</form>
|
22
|
+
</div>
|
23
|
+
<div class="modal-footer">
|
24
|
+
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
25
|
+
</div>
|
@@ -3,6 +3,7 @@ en:
|
|
3
3
|
download:
|
4
4
|
download: 'Download'
|
5
5
|
success: 'Your file %{title} is ready for download'
|
6
|
+
hgl_success: 'You should receive an email when your download is ready'
|
6
7
|
error: 'Sorry, the requested file could not be downloaded'
|
7
8
|
home:
|
8
9
|
headline: 'Explore and discover...'
|