geoblacklight 0.6.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -1
  3. data/app/assets/javascripts/geoblacklight/modules/collapse.js +1 -0
  4. data/app/assets/javascripts/geoblacklight/viewers/map.js +1 -1
  5. data/app/assets/stylesheets/geoblacklight/_geoblacklight.scss +1 -0
  6. data/app/assets/stylesheets/geoblacklight/modules/icon-customization.scss +4 -0
  7. data/app/assets/stylesheets/geoblacklight/modules/results.scss +10 -0
  8. data/app/assets/stylesheets/geoblacklight/modules/toolbar.scss +5 -0
  9. data/app/assets/stylesheets/geoblacklight/modules/web_services.scss +5 -0
  10. data/app/helpers/geoblacklight_helper.rb +8 -0
  11. data/app/views/catalog/_index_split_default.html.erb +2 -1
  12. data/app/views/catalog/_show_default_viewer_container.html.erb +1 -1
  13. data/app/views/catalog/_web_services.html.erb +12 -0
  14. data/app/views/catalog/web_services.html +1 -0
  15. data/app/views/catalog/web_services.js.erb +7 -0
  16. data/config/locales/geoblacklight.en.yml +3 -0
  17. data/geoblacklight.gemspec +2 -2
  18. data/lib/generators/geoblacklight/install_generator.rb +1 -13
  19. data/lib/generators/geoblacklight/templates/catalog_controller.rb +3 -0
  20. data/lib/generators/geoblacklight/templates/geoblacklight.js +1 -1
  21. data/lib/generators/geoblacklight/templates/settings.yml +8 -0
  22. data/lib/geoblacklight.rb +3 -0
  23. data/lib/geoblacklight/controller_override.rb +7 -3
  24. data/lib/geoblacklight/download/kmz_download.rb +1 -1
  25. data/lib/geoblacklight/engine.rb +0 -1
  26. data/lib/geoblacklight/routes.rb +18 -0
  27. data/lib/geoblacklight/solr_document.rb +3 -0
  28. data/lib/geoblacklight/version.rb +1 -1
  29. data/lib/geoblacklight/view_helper_override.rb +1 -1
  30. data/spec/controllers/catalog_controller_spec.rb +11 -0
  31. data/spec/features/web_services_modal_spec.rb +24 -0
  32. data/spec/test_app_templates/lib/generators/test_app_generator.rb +1 -1
  33. data/vendor/assets/javascripts/leaflet-iiif.js +185 -0
  34. data/vendor/assets/javascripts/readmore.min.js +11 -0
  35. metadata +19 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4f0b1899937af72972b9fcd3639998ff099faa9d
4
- data.tar.gz: d41109a86c1db2ac475165f99f74e0c4ae32b722
3
+ metadata.gz: 7a3ffb556c402cb467f68a38e22eedbd9a1c6728
4
+ data.tar.gz: a3b02401bcf09588a304b1cfd0b6cec5b4d22bdb
5
5
  SHA512:
6
- metadata.gz: b3fae7290320ddc95574fc946183ef4544fdb186e6daf2a1a2856e1273258c2bc053b2e078b53c986719d2e6500d56083c2dc333e62e28341c17ad392be48fd1
7
- data.tar.gz: 183a501a8f613323cc124341679f0ed5aff66d9d1195ececd774aae7c71a0a60a6b82c9a5e7c0d8462c2fdc900fc9109befc6daa6ba936336df12f588d1301d2
6
+ metadata.gz: 0ab6305640e1412878865612ace63b887cd193532ec4433cba44bd93728161c66735326dd9c549c835bed1d03d6d63b89250b0f98ecc855dc2e0a1d0c3c3f30f
7
+ data.tar.gz: e38ecfeabde0a079ca7073ef109ddbae2463e4b8e590a9662d7f0367e9f54e4ea52e6c2016a95070b16553d04f63fc169858aa3d78fb574581062acbbce34bfe
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ rescue LoadError
5
5
  puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
6
  end
7
7
 
8
- BLACKLIGHT_JETTY_VERSION = '4.10.2'
8
+ BLACKLIGHT_JETTY_VERSION = '4.10.3'
9
9
  ZIP_URL = "https://github.com/projectblacklight/blacklight-jetty/archive/v#{BLACKLIGHT_JETTY_VERSION}.zip"
10
10
  APP_ROOT = File.dirname(__FILE__)
11
11
 
@@ -2,5 +2,6 @@ Blacklight.onLoad(function() {
2
2
  $('#content')
3
3
  .on('click', '#documents [data-layer-id]', function() {
4
4
  $(this).find('.collapse').collapse('toggle');
5
+ $(this).find('.caret-toggle').toggleClass('open');
5
6
  });
6
7
  });
@@ -7,7 +7,7 @@ GeoBlacklight.Viewer.Map = GeoBlacklight.Viewer.extend({
7
7
  * Initial bounds of map
8
8
  * @type {L.LatLngBounds}
9
9
  */
10
- bbox: [[-85, -180], [85, 180]]
10
+ bbox: [[-80, -195], [80, 185]]
11
11
  },
12
12
 
13
13
  basemap: L.tileLayer(
@@ -23,3 +23,4 @@
23
23
  @import 'modules/geosearch';
24
24
  @import 'modules/search_widgets';
25
25
  @import 'modules/toolbar';
26
+ @import 'modules/web_services';
@@ -29,3 +29,7 @@
29
29
  .geoblacklight-email {
30
30
  @extend .fa, .fa-envelope;
31
31
  }
32
+
33
+ .geoblacklight-web_services {
34
+ @extend .fa, .fa-external-link;
35
+ }
@@ -26,4 +26,14 @@
26
26
  .index_title {
27
27
  @extend .text-span;
28
28
  @extend .hide-overflow;
29
+ }
30
+
31
+ .caret-toggle {
32
+ @extend .fa, .fa-caret-right;
33
+ cursor: pointer;
34
+ width: 10px;
35
+
36
+ &.open {
37
+ @extend .fa, .fa-caret-down;
38
+ }
29
39
  }
@@ -16,4 +16,9 @@
16
16
  text-align: center;
17
17
  width: 1.4em;
18
18
  }
19
+
20
+ .geoblacklight-web_services {
21
+ text-align: center;
22
+ width: 1.4em;
23
+ }
19
24
  }
@@ -0,0 +1,5 @@
1
+ .web-services-form {
2
+ .form-control[readonly] {
3
+ cursor: text;
4
+ }
5
+ }
@@ -55,6 +55,14 @@ module GeoblacklightHelper
55
55
  t "geoblacklight.formats.#{format.downcase}"
56
56
  end
57
57
 
58
+ ##
59
+ # Looks up formatted names for references
60
+ # @param (String, Symbol) reference
61
+ # @return (String)
62
+ def formatted_name_reference(reference)
63
+ t "geoblacklight.references.#{reference}"
64
+ end
65
+
58
66
  ##
59
67
  # Wraps download text with proper_case_format
60
68
  #
@@ -1,11 +1,12 @@
1
1
  <% # header bar for doc items in index view -%>
2
- <%= content_tag :div, class: 'documentHeader row', data: { layer_id: document[:uuid], bbox: document[:solr_bbox], geom: document[:solr_geom] } do %>
2
+ <%= content_tag :div, class: 'documentHeader row', data: { layer_id: document[:uuid], bbox: document.bounding_box_as_wsen } do %>
3
3
  <div class='status-icons'>
4
4
  <%= geoblacklight_icon(document['layer_geom_type_s']) %>
5
5
  <%= geoblacklight_icon(document['dct_provenance_s']) %>
6
6
  <%= geoblacklight_icon(document['dc_rights_s']) %>
7
7
  </div>
8
8
  <h5 class="index_title col-sm-9s cosl-lg-10 text-span">
9
+ <span class='caret-toggle'></span>
9
10
  <% counter = document_counter_with_offset(document_counter) %>
10
11
  <span class="document-counter">
11
12
  <%= t('blacklight.search.documents.counter', :counter => counter) if counter %>
@@ -1,5 +1,5 @@
1
1
  <% document ||= @document %>
2
2
  <div id='viewer-container' class="col-md-8">
3
- <%= content_tag :div, id: 'map', data: { map: 'item', protocol: document.viewer_protocol, url: document.viewer_endpoint, 'layer-id' => document[:layer_id_s], 'map-bbox' => document[:solr_bbox], 'catalog-path'=> catalog_index_path, available: document_available? } do %>
3
+ <%= content_tag :div, id: 'map', data: { map: 'item', protocol: document.viewer_protocol, url: document.viewer_endpoint, 'layer-id' => document[:layer_id_s], 'map-bbox' => document.bounding_box_as_wsen, 'catalog-path'=> catalog_index_path, available: document_available? } do %>
4
4
  <% end %>
5
5
  </div>
@@ -0,0 +1,12 @@
1
+ <% document ||= @document %>
2
+
3
+ <% document.references.refs.each do |reference| %>
4
+ <% if Settings.WEBSERVICES_SHOWN.include? reference.type.to_s %>
5
+ <div class='form-group web-services-form'>
6
+ <label for='<%= reference.type%>_webservice'>
7
+ <%= "#{formatted_name_reference(reference.type)} link" %>
8
+ </label>
9
+ <input type='text' id='<%= reference.type%>_webservice' value='<%= reference.endpoint %>' readonly='readonly' class='form-control'>
10
+ </div>
11
+ <% end %>
12
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= render :partial => 'web_services' %>
@@ -0,0 +1,7 @@
1
+ <div class="modal-header">
2
+ <button type="button" class="ajax-modal-close close" data-dismiss="modal" aria-hidden="true">×</button>
3
+ <h1 class="modal-title">Web services</h1>
4
+ <div class="modal-body">
5
+ <%= render partial: 'web_services' %>
6
+ </div>
7
+ </div>
@@ -18,3 +18,6 @@ en:
18
18
  geotiff: 'GeoTIFF'
19
19
  kmz: 'KMZ'
20
20
  shapefile: 'Shapefile'
21
+ references:
22
+ wms: 'Web Mapping Service (WMS)'
23
+ wfs: 'Web Feature Service (WFS)'
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency 'blacklight', '~> 5.8.2'
21
+ spec.add_dependency 'blacklight', '~> 5.9'
22
22
  spec.add_dependency 'leaflet-rails', '~> 0.7.3'
23
23
  spec.add_dependency 'blacklight_range_limit', '~> 5.0.3'
24
24
  spec.add_dependency 'font-awesome-rails', '~> 4.1.0.0'
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency 'bundler', '~> 1.5'
29
29
  spec.add_development_dependency 'rake', '~> 10.3.2'
30
30
  spec.add_development_dependency 'rspec-rails', '~> 3.0.1'
31
- spec.add_development_dependency 'jettywrapper', '~> 1.8.3'
31
+ spec.add_development_dependency 'jettywrapper', '>= 2.0'
32
32
  spec.add_development_dependency 'engine_cart', '~> 0.4.0'
33
33
  spec.add_development_dependency 'capybara', '~> 2.3.0'
34
34
  spec.add_development_dependency 'poltergeist', '~> 1.5.0'
@@ -9,17 +9,12 @@ module Geoblacklight
9
9
 
10
10
  desc "Install Geoblacklight"
11
11
 
12
- def install_rails_assets_gems
13
- gem 'rails-assets-leaflet-iiif', '~> 0.0.3', source: 'https://rails-assets.org'
14
- gem 'rails-assets-readmore', source: 'https://rails-assets.org'
15
- end
16
-
17
12
  def install_jettywrapper
18
13
  return unless options[:jettywrapper]
19
14
  copy_file 'config/jetty.yml'
20
15
 
21
16
  append_to_file 'Rakefile',
22
- "\nZIP_URL = \"https://github.com/projectblacklight/blacklight-jetty/archive/v4.10.2.zip\"\n" +
17
+ "\nZIP_URL = \"https://github.com/projectblacklight/blacklight-jetty/archive/v4.10.3.zip\"\n" +
23
18
  "require 'jettywrapper'\n"
24
19
  end
25
20
 
@@ -49,13 +44,6 @@ module Geoblacklight
49
44
  end
50
45
  end
51
46
 
52
- def inject_routes
53
- route 'post "wms/handle"'
54
- route 'resources :download, only: [:show, :file]'
55
- route "get 'download/file/:id' => 'download#file', as: :download_file"
56
- route "get 'download/hgl/:id' => 'download#hgl', as: :download_hgl"
57
- end
58
-
59
47
  def create_downloads_directory
60
48
  FileUtils.mkdir_p("tmp/cache/downloads") unless File.directory?("tmp/cache/downloads")
61
49
  end
@@ -205,6 +205,9 @@ class CatalogController < ApplicationController
205
205
  # If there are more than this many search results, no spelling ("did you
206
206
  # mean") suggestion is offered.
207
207
  config.spell_max = 5
208
+
209
+ # Custom tools for GeoBlacklight
210
+ config.add_show_tools_partial :web_services, if: proc { |_context, _config, options| (Settings.WEBSERVICES_SHOWN & options[:document].references.refs.map(&:type).map(&:to_s)).any? }
208
211
  end
209
212
 
210
213
 
@@ -4,4 +4,4 @@
4
4
  //= require geoblacklight/downloaders
5
5
  //= require blacklight_range_limit
6
6
  //= require leaflet-iiif
7
- //= require readmore
7
+ //= require readmore.min
@@ -1,3 +1,6 @@
1
+ #Main Solr geometry field used for spatial search and bounding box. Should be type 'rpt'
2
+ GEOMETRY_FIELD: 'solr_bbox'
3
+
1
4
  # Institution deployed at
2
5
  INSTITUTION: 'Stanford'
3
6
 
@@ -7,6 +10,11 @@ TIMEOUT_DOWNLOAD: 16
7
10
  # (For WMS inspection) timeout and open_timeout parameters for Faraday
8
11
  TIMEOUT_WMS: 4
9
12
 
13
+ # Web services shown in tool panel
14
+ WEBSERVICES_SHOWN:
15
+ - 'wms'
16
+ - 'wfs'
17
+
10
18
  # WMS Parameters
11
19
  WMS_PARAMS:
12
20
  :SERVICE: 'WMS'
data/lib/geoblacklight.rb CHANGED
@@ -19,6 +19,8 @@ module Geoblacklight
19
19
  require 'geoblacklight/download/hgl_download'
20
20
  require 'geoblacklight/reference'
21
21
  require 'geoblacklight/references'
22
+ require 'geoblacklight/routes'
23
+
22
24
  def self.inject!
23
25
  CatalogController.send(:include, Geoblacklight::ControllerOverride)
24
26
  CatalogController.send(:include, Geoblacklight::CatalogHelperOverride)
@@ -29,6 +31,7 @@ module Geoblacklight
29
31
  SearchHistoryController.helpers.is_a?(Geoblacklight::ViewHelperOverride)
30
32
  SavedSearchesController.send(:helper, Geoblacklight::ViewHelperOverride) unless
31
33
  SavedSearchesController.helpers.is_a?(Geoblacklight::ViewHelperOverride)
34
+ Blacklight::Routes.send(:include, Geoblacklight::Routes)
32
35
  end
33
36
 
34
37
  def self.logger
@@ -4,15 +4,19 @@ module Geoblacklight
4
4
  included do
5
5
  solr_search_params_logic << :add_spatial_params
6
6
  end
7
-
7
+
8
8
  def add_spatial_params(solr_params, req_params)
9
9
  if req_params[:bbox]
10
10
  solr_params[:bq] ||= []
11
- solr_params[:bq] = ["solr_bbox:\"IsWithin(#{req_params[:bbox]})\"^10"]
11
+ solr_params[:bq] = ["#{Settings.GEOMETRY_FIELD}:\"IsWithin(#{req_params[:bbox]})\"^10"]
12
12
  solr_params[:fq] ||= []
13
- solr_params[:fq] << "solr_bbox:\"Intersects(#{req_params[:bbox]})\""
13
+ solr_params[:fq] << "#{Settings.GEOMETRY_FIELD}:\"Intersects(#{req_params[:bbox]})\""
14
14
  end
15
15
  solr_params
16
16
  end
17
+
18
+ def web_services
19
+ @response, @document = get_solr_response_for_doc_id params[:id]
20
+ end
17
21
  end
18
22
  end
@@ -2,7 +2,7 @@ class KmzDownload < Download
2
2
  KMZ_DOWNLOAD_PARAMS = { service: 'wms', version: '1.1.0', request: 'GetMap', srsName: 'EPSG:900913', format: 'application/vnd.google-earth.kmz', width: 2000, height: 2000 }
3
3
 
4
4
  def initialize(document)
5
- request_params = KMZ_DOWNLOAD_PARAMS.merge(layers: document[:layer_id_s], bbox: document[:solr_bbox].split(' ').join(', '))
5
+ request_params = KMZ_DOWNLOAD_PARAMS.merge(layers: document[:layer_id_s], bbox: document.bounding_box_as_wsen.split(' ').join(', '))
6
6
  super(document, {
7
7
  type: 'kmz',
8
8
  extension: 'kmz',
@@ -11,7 +11,6 @@ module Geoblacklight
11
11
 
12
12
  Blacklight::Configuration.default_values[:view].split.partials = ['index']
13
13
  Blacklight::Configuration.default_values[:view].delete_field('list')
14
-
15
14
  # GeoblacklightHelper is needed by all helpers, so we inject it
16
15
  # into action view base here.
17
16
  initializer 'geoblacklight.helpers' do |app|
@@ -0,0 +1,18 @@
1
+ module Geoblacklight
2
+ module Routes
3
+ extend ActiveSupport::Concern
4
+ included do |klass|
5
+ klass.default_route_sets += [:web_services_routes]
6
+ end
7
+
8
+ def web_services_routes(primary_resource)
9
+ add_routes do |options|
10
+ post 'wms/handle'
11
+ resources :download, only: [:show, :file]
12
+ get 'download/file/:id' => 'download#file', as: :download_file
13
+ get 'download/hgl/:id' => 'download#hgl', as: :download_hgl
14
+ get "#{primary_resource}/:id/web_services" => "#{primary_resource}#web_services", as: "web_services_#{primary_resource}"
15
+ end
16
+ end
17
+ end
18
+ end
@@ -51,6 +51,9 @@ module Geoblacklight
51
51
  "http://schema.org/Dataset"
52
52
  end
53
53
 
54
+ def bounding_box_as_wsen
55
+ get(Settings.GEOMETRY_FIELD.to_sym)
56
+ end
54
57
  ##
55
58
  # Provides a convenience method to access a SolrDocument's References
56
59
  # endpoint url without having to check and see if it is available
@@ -1,3 +1,3 @@
1
1
  module Geoblacklight
2
- VERSION = '0.6.2'
2
+ VERSION = '0.7.0'
3
3
  end
@@ -30,7 +30,7 @@ module Geoblacklight
30
30
  if params[:bbox]
31
31
  content << render_constraint_element('Bounding Box',
32
32
  params[:bbox],
33
- remove: catalog_index_path(remove_spatial_filter_group(:bbox, params)))
33
+ remove: search_action_path(remove_spatial_filter_group(:bbox, params)))
34
34
  end
35
35
 
36
36
  return content
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe CatalogController, type: :controller do
4
+ describe '#web_services' do
5
+ it 'should return a document based off an id' do
6
+ get :web_services, id: 'mit-us-ma-e25zcta5dct-2000'
7
+ expect(response.status).to eq 200
8
+ expect(assigns(:document)).to_not be_nil
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ feature 'web services tools' do
4
+ feature 'when wms/wfs are provided', js: true do
5
+ scenario 'shows up in tools' do
6
+ visit catalog_path 'stanford-cg357zz0321'
7
+ expect(page).to have_css 'li.web_services a', text: 'Web services'
8
+ click_link 'Web services'
9
+ within '.modal-body' do
10
+ expect(page).to have_css 'input', count: 2
11
+ expect(page).to have_css 'label', text: 'Web Feature Service (WFS) link'
12
+ expect(page).to have_css 'input[value="http://geowebservices-restricted.stanford.edu/geoserver/wfs"]'
13
+ expect(page).to have_css 'label', text: 'Web Mapping Service (WMS) link'
14
+ expect(page).to have_css 'input[value="http://geowebservices-restricted.stanford.edu/geoserver/wms"]'
15
+ end
16
+ end
17
+ end
18
+ feature 'no wms or wfs provided' do
19
+ scenario 'does not show up in tools' do
20
+ visit catalog_path 'mit-001145244'
21
+ expect(page).to_not have_css 'li.web_services a', text: 'Web services'
22
+ end
23
+ end
24
+ end
@@ -4,7 +4,7 @@ class TestAppGenerator < Rails::Generators::Base
4
4
  source_root '../../spec/test_app_templates'
5
5
 
6
6
  def add_gems
7
- gem 'blacklight', "~> 5.8.2"
7
+ gem 'blacklight', "~> 5.9"
8
8
  Bundler.with_clean_env do
9
9
  run "bundle install"
10
10
  end
@@ -0,0 +1,185 @@
1
+ /*
2
+ * Leaflet-IIIF 0.0.5
3
+ * IIIF Viewer for Leaflet
4
+ * by Jack Reed, @mejackreed
5
+ */
6
+
7
+ L.TileLayer.Iiif = L.TileLayer.extend({
8
+ options: {
9
+ continuousWorld: true,
10
+ tileSize: 256,
11
+ updateWhenIdle: true
12
+ },
13
+
14
+ initialize: function(url, options) {
15
+ options = L.setOptions(this, options);
16
+ this._infoDeferred = new $.Deferred();
17
+ this._infoUrl = url;
18
+ this._baseUrl = this._templateUrl();
19
+ this._getInfo();
20
+ },
21
+ getTileUrl: function(coords) {
22
+ var _this = this,
23
+ x = coords.x,
24
+ y = (coords.y),
25
+ zoom = _this._map.getZoom(),
26
+ scale = Math.pow(2, _this.maxZoom - zoom),
27
+ tileBaseSize = _this.options.tileSize * scale,
28
+ minx = (x * tileBaseSize),
29
+ miny = (y * tileBaseSize),
30
+ maxx = Math.min(minx + tileBaseSize, _this.x),
31
+ maxy = Math.min(miny + tileBaseSize, _this.y);
32
+
33
+ return L.Util.template(this._baseUrl, L.extend({
34
+ format: 'jpg',
35
+ quality: _this.quality,
36
+ region: [minx, miny, (maxx - minx), (maxy - miny)].join(','),
37
+ rotation: 0,
38
+ size: 'pct:' + (100 / scale)
39
+ }, this.options));
40
+ },
41
+ onAdd: function(map) {
42
+ var _this = this;
43
+
44
+ // Wait for deferred to complete
45
+ $.when(_this._infoDeferred).done(function() {
46
+
47
+ // Find best zoom level and center map
48
+ var initialZoom = _this._getInitialZoom(map.getSize()),
49
+ imageSize = _this._imageSizes[initialZoom],
50
+ sw = map.options.crs.pointToLatLng(L.point(0, imageSize.y), initialZoom),
51
+ ne = map.options.crs.pointToLatLng(L.point(imageSize.x, 0), initialZoom),
52
+ bounds = L.latLngBounds(sw, ne);
53
+
54
+ map.fitBounds(bounds, true);
55
+
56
+ // Set maxZoom for map
57
+ map._layersMaxZoom = _this.maxZoom;
58
+
59
+ // Call add TileLayer
60
+ L.TileLayer.prototype.onAdd.call(_this, map);
61
+
62
+ // Reset tile sizes to handle non 256x256 IIIF tiles
63
+ _this.on('tileload', function(tile, url) {
64
+
65
+ var height = tile.tile.naturalHeight,
66
+ width = tile.tile.naturalWidth;
67
+
68
+ // No need to resize if tile is 256 x 256
69
+ if (height === 256 && width === 256) return;
70
+
71
+ tile.tile.style.width = width + 'px';
72
+ tile.tile.style.height = height + 'px';
73
+
74
+ });
75
+ });
76
+ },
77
+ _getInfo: function() {
78
+ var _this = this;
79
+
80
+ // Look for a way to do this without jQuery
81
+ $.getJSON(_this._infoUrl)
82
+ .done(function(data) {
83
+ _this.y = data.height;
84
+ _this.x = data.width;
85
+
86
+ var profile,
87
+ tierSizes = [],
88
+ imageSizes = [],
89
+ scale,
90
+ width_,
91
+ height_,
92
+ tilesX_,
93
+ tilesY_;
94
+
95
+ // Set quality based off of IIIF version
96
+ if (data.profile instanceof Array) {
97
+ profile = data.profile[0];
98
+ }else {
99
+ profile = data.profile;
100
+ }
101
+ switch (profile) {
102
+ case 'http://library.stanford.edu/iiif/image-api/compliance.html#level1':
103
+ _this.quality = 100;
104
+ break;
105
+ case 'http://library.stanford.edu/iiif/image-api/1.1/compliance.html':
106
+ _this.quality = 'native';
107
+ break;
108
+ case 'http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1':
109
+ _this.quality = 'native';
110
+ break;
111
+ case 'http://iiif.io/api/image/2/level2.json':
112
+ _this.quality = 'default';
113
+ break;
114
+ case 'http://iiif.io/api/image/2/level1.json':
115
+ _this.quality = 'default';
116
+ break;
117
+ case 'http://iiif.io/api/image/2/level0.json':
118
+ _this.quality = 'default';
119
+ break;
120
+ }
121
+
122
+ ceilLog2 = function(x) {
123
+ return Math.ceil(Math.log(x) / Math.LN2);
124
+ };
125
+
126
+ // Calculates maxZoom for the layer
127
+ _this.maxZoom = Math.max(ceilLog2(_this.x / _this.options.tileSize),
128
+ ceilLog2(_this.y / _this.options.tileSize));
129
+
130
+ for (var i = 0; i <= _this.maxZoom; i++) {
131
+ scale = Math.pow(2, _this.maxZoom - i);
132
+ width_ = Math.ceil(_this.x / scale);
133
+ height_ = Math.ceil(_this.y / scale);
134
+ tilesX_ = Math.ceil(width_ / _this.options.tileSize);
135
+ tilesY_ = Math.ceil(height_ / _this.options.tileSize);
136
+ tierSizes.push([tilesX_, tilesY_]);
137
+ imageSizes.push(L.point(width_,height_));
138
+ }
139
+
140
+ _this._tierSizes = tierSizes;
141
+ _this._imageSizes = imageSizes;
142
+
143
+ // Resolved Deferred to initiate tilelayer load
144
+ _this._infoDeferred.resolve();
145
+ });
146
+ },
147
+ _infoToBaseUrl: function() {
148
+ return this._infoUrl.replace('info.json', '');
149
+ },
150
+ _templateUrl: function() {
151
+ return this._infoToBaseUrl() + '{region}/{size}/{rotation}/{quality}.{format}';
152
+ },
153
+ _tileShouldBeLoaded: function(coords) {
154
+ var _this = this,
155
+ zoom = _this._map.getZoom(),
156
+ sizes = _this._tierSizes[zoom],
157
+ x = coords.x,
158
+ y = (coords.y);
159
+
160
+ if (!sizes) return false;
161
+ if (x < 0 || sizes[0] <= x || y < 0 || sizes[1] <= y) {
162
+ return false;
163
+ }else {
164
+ return true;
165
+ }
166
+ },
167
+ _getInitialZoom: function (mapSize) {
168
+ var _this = this,
169
+ tolerance = 0.8,
170
+ imageSize;
171
+
172
+ for (var i = _this.maxZoom; i >= 0; i--) {
173
+ imageSize = this._imageSizes[i];
174
+ if (imageSize.x * tolerance < mapSize.x && imageSize.y * tolerance < mapSize.y) {
175
+ return i;
176
+ }
177
+ }
178
+ // return a default zoom
179
+ return 2;
180
+ }
181
+ });
182
+
183
+ L.tileLayer.iiif = function(url, options) {
184
+ return new L.TileLayer.Iiif(url, options);
185
+ };
@@ -0,0 +1,11 @@
1
+ /*!
2
+ * @preserve
3
+ *
4
+ * Readmore.js jQuery plugin
5
+ * Author: @jed_foster
6
+ * Project home: http://jedfoster.github.io/Readmore.js
7
+ * Licensed under the MIT license
8
+ *
9
+ * Debounce function from http://davidwalsh.name/javascript-debounce-function
10
+ */
11
+ !function(e){"use strict";function t(e,t,a){var i;return function(){var n=this,o=arguments,r=function(){i=null,a||e.apply(n,o)},s=a&&!i;clearTimeout(i),i=setTimeout(r,t),s&&e.apply(n,o)}}function a(e){var t=++h;return String(null==e?"rmjs-":e)+t}function i(e){var t=e.clone().css({height:"auto",width:e.width(),maxHeight:"none",overflow:"hidden"}).insertAfter(e),a=t.outerHeight(),i=parseInt(t.css({maxHeight:""}).css("max-height").replace(/[^-\d\.]/g,""),10),n=e.data("defaultHeight");t.remove();var o=i||e.data("collapsedHeight")||n;e.data({expandedHeight:a,maxHeight:i,collapsedHeight:o}).css({maxHeight:"none"})}function n(e){if(!d[e.selector]){var t=" ";e.embedCSS&&""!==e.blockCSS&&(t+=e.selector+" + [data-readmore-toggle], "+e.selector+"[data-readmore]{"+e.blockCSS+"}"),t+=e.selector+"[data-readmore]{transition: height "+e.speed+"ms;overflow: hidden;}",function(e,t){var a=e.createElement("style");a.type="text/css",a.styleSheet?a.styleSheet.cssText=t:a.appendChild(e.createTextNode(t)),e.getElementsByTagName("head")[0].appendChild(a)}(document,t),d[e.selector]=!0}}function o(t,a){this.element=t,this.options=e.extend({},s,a),n(this.options),this._defaults=s,this._name=r,this.init(),window.addEventListener("load",l),window.addEventListener("resize",l)}var r="readmore",s={speed:100,collapsedHeight:200,heightMargin:16,moreLink:'<a href="#">Read More</a>',lessLink:'<a href="#">Close</a>',embedCSS:!0,blockCSS:"display: block; width: 100%;",startOpen:!1,beforeToggle:function(){},afterToggle:function(){}},d={},h=0,l=t(function(){e("[data-readmore]").each(function(){var t=e(this),a="true"===t.attr("aria-expanded");i(t),t.css({height:t.data(a?"expandedHeight":"collapsedHeight")})})},100);o.prototype={init:function(){var t=this,n=e(this.element);n.data({defaultHeight:this.options.collapsedHeight,heightMargin:this.options.heightMargin}),i(n);var o=n.data("collapsedHeight"),r=n.data("heightMargin");if(n.outerHeight(!0)<=o+r)return!0;var s=n.attr("id")||a(),d=t.options.startOpen?t.options.lessLink:t.options.moreLink;n.attr({"data-readmore":"","aria-expanded":!1,id:s}),n.after(e(d).on("click",function(e){t.toggle(this,n[0],e)}).attr({"data-readmore-toggle":"","aria-controls":s})),t.options.startOpen||n.css({height:o})},toggle:function(t,a,i){i&&i.preventDefault(),t||(t=e('[aria-controls="'+this.element.id+'"]')[0]),a||(a=this.element);var n=this,o=e(a),r="",s="",d=!1,h=o.data("collapsedHeight");o.height()<=h?(r=o.data("expandedHeight")+"px",s="lessLink",d=!0):(r=h,s="moreLink"),n.options.beforeToggle(t,a,!d),o.css({height:r}),o.on("transitionend",function(){n.options.afterToggle(t,a,d),e(this).attr({"aria-expanded":d}).off("transitionend")}),e(t).replaceWith(e(n.options[s]).on("click",function(e){n.toggle(this,a,e)}).attr({"data-readmore-toggle":"","aria-controls":o.attr("id")}))},destroy:function(){e(this.element).each(function(){var t=e(this);t.attr({"data-readmore":null,"aria-expanded":null}).css({maxHeight:"",height:""}).next("[data-readmore-toggle]").remove(),t.removeData()})}},e.fn.readmore=function(t){var a=arguments,i=this.selector;return t=t||{},"object"==typeof t?this.each(function(){if(e.data(this,"plugin_"+r)){var a=e.data(this,"plugin_"+r);a.destroy.apply(a)}t.selector=i,e.data(this,"plugin_"+r,new o(this,t))}):"string"==typeof t&&"_"!==t[0]&&"init"!==t?this.each(function(){var i=e.data(this,"plugin_"+r);i instanceof o&&"function"==typeof i[t]&&i[t].apply(i,Array.prototype.slice.call(a,1))}):void 0}}(jQuery);
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geoblacklight
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Graves
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2015-02-02 00:00:00.000000000 Z
14
+ date: 2015-02-23 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: blacklight
@@ -19,14 +19,14 @@ dependencies:
19
19
  requirements:
20
20
  - - "~>"
21
21
  - !ruby/object:Gem::Version
22
- version: 5.8.2
22
+ version: '5.9'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: 5.8.2
29
+ version: '5.9'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: leaflet-rails
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -143,16 +143,16 @@ dependencies:
143
143
  name: jettywrapper
144
144
  requirement: !ruby/object:Gem::Requirement
145
145
  requirements:
146
- - - "~>"
146
+ - - ">="
147
147
  - !ruby/object:Gem::Version
148
- version: 1.8.3
148
+ version: '2.0'
149
149
  type: :development
150
150
  prerelease: false
151
151
  version_requirements: !ruby/object:Gem::Requirement
152
152
  requirements:
153
- - - "~>"
153
+ - - ">="
154
154
  - !ruby/object:Gem::Version
155
- version: 1.8.3
155
+ version: '2.0'
156
156
  - !ruby/object:Gem::Dependency
157
157
  name: engine_cart
158
158
  requirement: !ruby/object:Gem::Requirement
@@ -279,6 +279,7 @@ files:
279
279
  - app/assets/stylesheets/geoblacklight/modules/results.scss
280
280
  - app/assets/stylesheets/geoblacklight/modules/search_widgets.scss
281
281
  - app/assets/stylesheets/geoblacklight/modules/toolbar.scss
282
+ - app/assets/stylesheets/geoblacklight/modules/web_services.scss
282
283
  - app/controllers/download_controller.rb
283
284
  - app/controllers/wms_controller.rb
284
285
  - app/helpers/geoblacklight_helper.rb
@@ -296,7 +297,10 @@ files:
296
297
  - app/views/catalog/_show_header_default.html.erb
297
298
  - app/views/catalog/_show_tools.html.erb
298
299
  - app/views/catalog/_upper_metadata.html.erb
300
+ - app/views/catalog/_web_services.html.erb
299
301
  - app/views/catalog/index.html.erb
302
+ - app/views/catalog/web_services.html
303
+ - app/views/catalog/web_services.js.erb
300
304
  - app/views/download/hgl.html.erb
301
305
  - app/views/shared/_header_navbar.html.erb
302
306
  - config/initializers/rails_config.rb
@@ -325,12 +329,14 @@ files:
325
329
  - lib/geoblacklight/item_viewer.rb
326
330
  - lib/geoblacklight/reference.rb
327
331
  - lib/geoblacklight/references.rb
332
+ - lib/geoblacklight/routes.rb
328
333
  - lib/geoblacklight/solr_document.rb
329
334
  - lib/geoblacklight/version.rb
330
335
  - lib/geoblacklight/view_helper_override.rb
331
336
  - lib/geoblacklight/wms_layer.rb
332
337
  - lib/geoblacklight/wms_layer/feature_info_response.rb
333
338
  - lib/tasks/geoblacklight.rake
339
+ - spec/controllers/catalog_controller_spec.rb
334
340
  - spec/controllers/download_controller_spec.rb
335
341
  - spec/factories/user.rb
336
342
  - spec/features/download_layer_spec.rb
@@ -343,6 +349,7 @@ files:
343
349
  - spec/features/search_bar_spec.rb
344
350
  - spec/features/show_page_metadata_spec.rb
345
351
  - spec/features/split_view.html.erb_spec.rb
352
+ - spec/features/web_services_modal_spec.rb
346
353
  - spec/fixtures/solr_documents/actual-papermap1.json
347
354
  - spec/fixtures/solr_documents/actual-point1.json
348
355
  - spec/fixtures/solr_documents/actual-polygon1.json
@@ -372,7 +379,9 @@ files:
372
379
  - spec/views/catalog/_document_split.html.erb_spec.rb
373
380
  - spec/views/catalog/_index_split.html.erb_spec.rb
374
381
  - template.rb
382
+ - vendor/assets/javascripts/leaflet-iiif.js
375
383
  - vendor/assets/javascripts/native.history.js
384
+ - vendor/assets/javascripts/readmore.min.js
376
385
  homepage: http://github.com/geoblacklight/geoblacklight
377
386
  licenses:
378
387
  - Apache 2.0
@@ -398,6 +407,7 @@ signing_key:
398
407
  specification_version: 4
399
408
  summary: A discovery platform for geospatial holdings
400
409
  test_files:
410
+ - spec/controllers/catalog_controller_spec.rb
401
411
  - spec/controllers/download_controller_spec.rb
402
412
  - spec/factories/user.rb
403
413
  - spec/features/download_layer_spec.rb
@@ -410,6 +420,7 @@ test_files:
410
420
  - spec/features/search_bar_spec.rb
411
421
  - spec/features/show_page_metadata_spec.rb
412
422
  - spec/features/split_view.html.erb_spec.rb
423
+ - spec/features/web_services_modal_spec.rb
413
424
  - spec/fixtures/solr_documents/actual-papermap1.json
414
425
  - spec/fixtures/solr_documents/actual-point1.json
415
426
  - spec/fixtures/solr_documents/actual-polygon1.json