geoblacklight 0.6.2 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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