geoblacklight 5.2.0 → 5.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 32b1f6b2ee7ddbd7ba16adc14ddad99cb87a9294004dfe7337ed0084626d1202
4
- data.tar.gz: 3dfb956c7f0f3236671a65d9b3b8aea8135f473a388236b8879b0fdca064e310
3
+ metadata.gz: 2f9e80f30735f8fa8f8e4c03e0a855b4e709acbf1eb860cad0a14e66dba72064
4
+ data.tar.gz: 824c5c71fb501807335ab0862522d5a14fec06f31b1f21b09d732338f27e5b89
5
5
  SHA512:
6
- metadata.gz: a8f1c491b83df2cf7c3ca22b8239c718697eb9e9aa3596255e2bd2c6b59ee85d79ee04bbc70c8fac9fe9bd20f9d9ed56519184898d4e6bfa21adc3a2b7261728
7
- data.tar.gz: 24f5d3148d558ffe6a2c8845419228bc51bf64d7277fa1ae7aad8e920341851cf02a91cb699cc7080dd7a27ea6c62d415d91620b0744b92bd9d8148cbe917362
6
+ metadata.gz: acbee7539ae6c048356e42467b99f4e94c948cc9d5a35ddeeccc721028965808267d33d3d3ce91fc05afdd5992fbee5edeeda1760aa6257dea6420bc83e194ce
7
+ data.tar.gz: 8395fe82750ac0bfe3dc3de410a7039d0eff671ffee63690f1a0858b88687dc163ed92a711a46a94caf956eb3cdd5b04f7c96cb5a7cf2aedbaec9d74a2136412
@@ -39,13 +39,13 @@ jobs:
39
39
  matrix:
40
40
  ruby_version: ["3.2", "3.3", "3.4"]
41
41
  rails_version: ["7.2.3", "8.1.1"]
42
- asset_pipeline: ["vite"]
43
- additional_engine_cart_rails_options: ["--js rollup"]
42
+ asset_pipeline: ["importmap"]
43
+ additional_engine_cart_rails_options: ["--js importmap"]
44
44
  include:
45
45
  - ruby_version: "3.4"
46
46
  rails_version: "8.1.1"
47
- asset_pipeline: "importmap"
48
- additional_engine_cart_rails_options: "--js importmap"
47
+ asset_pipeline: "vite"
48
+ additional_engine_cart_rails_options: "--js rollup"
49
49
 
50
50
  name: test ruby ${{ matrix.ruby_version }} / rails ${{ matrix.rails_version }} / ${{ matrix.asset_pipeline }}
51
51
  steps:
@@ -49,13 +49,30 @@
49
49
  -webkit-line-clamp: 8;
50
50
  }
51
51
 
52
- #table-container{
53
- overflow:scroll;
54
- max-height: 450px;
52
+ #table-container {
55
53
  margin-bottom: 1rem;
56
54
 
57
55
  table {
58
56
  margin-bottom: 0px;
59
57
  }
60
58
  }
59
+
60
+ .attribute-data {
61
+ --bs-accordion-active-bg: none;
62
+ }
63
+
64
+ .sidebar-container {
65
+ width: 25vw;
66
+ overflow: scroll;
67
+ overscroll-behavior: contain;
68
+
69
+ img {
70
+ width: 100%;
71
+ }
72
+
73
+ @media screen and (max-width: breakpoint-max(sm)) {
74
+ width: calc(100vw - 100px);
75
+ max-height: 20vh!important;
76
+ }
77
+ }
61
78
  }
@@ -0,0 +1,16 @@
1
+ <div data-sidebar="<%= Settings.LEAFLET.SIDEBAR %>">
2
+ <div class="accordion attribute-data<% if Settings.LEAFLET.SIDEBAR %> sidebar-container<% end %>">
3
+ <div class="accordion-item">
4
+ <h2 class="accordion-header" id="accordionHeading">
5
+ <button class="accordion-button p-2 border-none bg-none" type="button" data-bs-toggle="collapse" data-bs-target="#<%= @id %>" aria-expanded="true" aria-controls="<%= @id %>">
6
+ <%= @title %>
7
+ </button>
8
+ </h2>
9
+ <div id="<%= @id %>" class="accordion-collapse collapse show" aria-labelledby="accordionHeading" data-bs-parent="#accordionHeading">
10
+ <div class="accordion-body p-0">
11
+ <%= content %>
12
+ </div>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ </div>
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Geoblacklight
4
+ class AccordionComponent < ViewComponent::Base
5
+ def initialize(id:, title:)
6
+ @id = id
7
+ @title = title
8
+ super()
9
+ end
10
+ end
11
+ end
@@ -1,17 +1,15 @@
1
- <div class='row'>
2
- <div id='table-container' class='col-md-12'>
3
- <table id="attribute-table" class="table table-hover table-condensed table-striped table-bordered col-md-12">
4
- <thead>
5
- <tr>
6
- <th><%= t('geoblacklight.show.attribute') %></th>
7
- <th><%= t('geoblacklight.show.value') %></th>
8
- </tr>
9
- </thead>
10
- <tbody class='attribute-table-body'>
11
- <tr>
12
- <td class='default-text' colspan='2'><em><%= t('geoblacklight.show.click_map') %></em></td>
13
- </tr>
14
- </tbody>
15
- </table>
16
- </div>
17
- </div>
1
+ <%= render Geoblacklight::AccordionComponent.new(id: 'attribute-table', title: t('geoblacklight.show.table_name')) do %>
2
+ <table id="attribute-table" class="table table-hover table-condensed table-striped mb-0 collapse show">
3
+ <thead>
4
+ <tr>
5
+ <th><%= t('geoblacklight.show.attribute') %></th>
6
+ <th><%= t('geoblacklight.show.value') %></th>
7
+ </tr>
8
+ </thead>
9
+ <tbody class='attribute-table-body'>
10
+ <tr>
11
+ <td class='default-text' colspan='2'><em><%= t('geoblacklight.show.click_map') %></em></td>
12
+ </tr>
13
+ </tbody>
14
+ </table>
15
+ <% end %>
@@ -1,4 +1,5 @@
1
- <div class='row'>
2
- <div class='viewer-information col-sm-12'>
1
+ <%= render Geoblacklight::AccordionComponent.new(id: 'index-map-attributes', title: t('geoblacklight.show.table_name')) do %>
2
+ <div class='viewer-information px-3'>
3
+ <em><%= t('geoblacklight.show.click_map') %></em>
3
4
  </div>
4
- </div>
5
+ <% end %>
@@ -1,5 +1,5 @@
1
1
  import { Icon, Control } from "leaflet";
2
- import "leaflet-fullscreen";
2
+ import { FullScreen } from "leaflet.fullscreen";
3
3
  import { layerGroup, polygon, map, tileLayer } from "leaflet";
4
4
  import { imageMapLayer } from "esri-leaflet";
5
5
  import { Controller } from "@hotwired/stimulus";
@@ -23,6 +23,7 @@ import {
23
23
  } from "geoblacklight/leaflet/layers";
24
24
  import { geoJSONToBounds } from "geoblacklight/leaflet/utils";
25
25
  import { DEFAULT_BOUNDS, DEFAULT_OPACITY, DEFAULT_GEOM_OVERLAY_OPTIONS } from "geoblacklight/leaflet/constants";
26
+ import sidebarControl from "geoblacklight/leaflet/controls/sidebar";
26
27
 
27
28
  export default class LeafletViewerController extends Controller {
28
29
  static values = {
@@ -146,7 +147,7 @@ export default class LeafletViewerController extends Controller {
146
147
  if (controlName == "Opacity")
147
148
  return new LayerOpacityControl(this.previewOverlay);
148
149
  if (controlName == "Fullscreen")
149
- return new Control.Fullscreen({ position: "topright", ...controlOptions });
150
+ return new FullScreen({ position: "bottomleft", ...controlOptions });
150
151
  if (controlName == "Geosearch")
151
152
  return new GeoSearchControl({ baseUrl: this.catalogBaseUrlValue, ...controlOptions });
152
153
  console.error(`Unsupported control name: "${controlName}"`);
@@ -179,10 +180,23 @@ export default class LeafletViewerController extends Controller {
179
180
  if (this.boundsOverlay) this.overlay.removeLayer(this.boundsOverlay);
180
181
  }
181
182
 
183
+ setUpSidebar() {
184
+ const sidebar = document.querySelector('[data-sidebar]')
185
+ if (!sidebar || sidebar.dataset.sidebar != 'true') return;
186
+ const control = new sidebarControl({
187
+ position: 'topright',
188
+ sidebar
189
+ });
190
+ this.map.addControl(control);
191
+ }
192
+
182
193
  addInspection() {
194
+ const inspectionProtocols = ['Wms', 'FeatureLayer', 'DynamicMapLayer', 'IndexMap']
195
+ if (!inspectionProtocols.includes(this.protocolValue)) return;
196
+ this.setUpSidebar();
183
197
  if (this.protocolValue == "Wms") return wmsInspection(this.map, this.urlValue, this.layerIdValue, this.previewOverlay);
184
198
  if (this.protocolValue == "FeatureLayer") return featureLayerInspection(this.map, this.previewOverlay);
185
- if (this.protocolValue == "DynamicMapLayer") return dynamicMapLayerInspection(this.map, this.previewOverlay, this.layerIdValue)
199
+ if (this.protocolValue == "DynamicMapLayer") return dynamicMapLayerInspection(this.map, this.previewOverlay, this.layerIdValue);
186
200
  // TODO: TiledMapLayer is converted but seems busted -- see layers.js. Don't know what to test it with, need a fixture.
187
201
  // if (this.protocolValue == "TiledMapLayer") return tiledMapLayerInspection(this.map, this.previewOverlay);
188
202
  }
@@ -0,0 +1,47 @@
1
+ import { Control } from "leaflet";
2
+
3
+ export default class sidebarControl extends Control {
4
+ constructor(options) {
5
+ const _options = { ...options };
6
+ super(_options);
7
+ }
8
+
9
+ onAdd(map) {
10
+ var div = L.DomUtil.create('div', 'leaflet-sidebar');
11
+ div.setAttribute("tabindex", "0");
12
+ const sidebarContainer = this.options.sidebar;
13
+
14
+ // Disable zoom when the mouse enters the sidebar
15
+ div.addEventListener('mouseenter', function() {
16
+ map.scrollWheelZoom.disable();
17
+ });
18
+
19
+ div.addEventListener('touchstart', function() {
20
+ map.touchZoom.disable();
21
+ map.dragging.disable();
22
+ });
23
+
24
+ // without this the map will try to find data about whatever is behind the sidebar
25
+ div.addEventListener('click', function(event) {
26
+ event.stopPropagation();
27
+ });
28
+
29
+ // Enable zoom when the mouse leaves the sidebar
30
+ div.addEventListener('touchend', function() {
31
+ map.touchZoom.enable();
32
+ map.dragging.enable();
33
+ });
34
+
35
+ // Enable zoom when the mouse leaes the sidebar
36
+ div.addEventListener('mouseleave', function() {
37
+ map.scrollWheelZoom.enable();
38
+ });
39
+
40
+ if (!sidebarContainer) { return };
41
+ // Make sure table height is same as map (with a little padding)
42
+ sidebarContainer.children[0].style.maxHeight = `${map._container.offsetHeight - 30}px`;
43
+ div.innerHTML = sidebarContainer.innerHTML;
44
+ sidebarContainer.remove();
45
+ return div;
46
+ }
47
+ }
data/config/importmap.rb CHANGED
@@ -3,18 +3,12 @@
3
3
  # OpenLayers viewer
4
4
  pin "ol", to: "https://esm.sh/ol@8.1.0"
5
5
  pin "ol/", to: "https://esm.sh/ol@8.1.0/"
6
- pin "ol-pmtiles", to: "https://cdn.skypack.dev/ol-pmtiles@0.3.0"
6
+ pin "ol-pmtiles", to: "https://cdn.jsdelivr.net/npm/ol-pmtiles@0.3.0/+esm"
7
7
 
8
8
  # Leaflet viewer
9
- pin "leaflet", to: "https://cdn.skypack.dev/leaflet@1.9.4"
10
- pin "esri-leaflet", to: "https://cdn.skypack.dev/esri-leaflet@3.0.12"
11
- pin "leaflet-fullscreen", to: "https://cdn.skypack.dev/leaflet-fullscreen@1.0.2"
12
-
13
- # Clover viewer
14
- pin "react", to: "https://esm.sh/react@18.3.1"
15
- pin "react-dom/client", to: "https://esm.sh/react-dom@18.3.1/client"
16
- pin "@samvera/clover-iiif/viewer", to: "https://esm.sh/@samvera/clover-iiif@2.10.0/dist/viewer"
17
- pin "@samvera/clover-iiif/image", to: "https://esm.sh/@samvera/clover-iiif@2.10.0/dist/image"
9
+ pin "leaflet", to: "https://cdn.jsdelivr.net/npm/leaflet@1.9.4/dist/leaflet-src.esm.js"
10
+ pin "esri-leaflet", to: "https://cdn.jsdelivr.net/npm/esri-leaflet@3.0.19/+esm"
11
+ pin "leaflet.fullscreen", to: "https://cdn.jsdelivr.net/npm/leaflet.fullscreen@5.3.0/+esm"
18
12
 
19
13
  # Geoblacklight
20
14
  pin_all_from Geoblacklight::Engine.root.join("app", "javascript", "geoblacklight"), under: "geoblacklight"
@@ -93,6 +93,7 @@ en:
93
93
  attribute: 'Attribute'
94
94
  value: 'Value'
95
95
  click_map: 'Click on map to inspect values'
96
+ table_name: 'Map data'
96
97
  help_text:
97
98
  viewer_protocol:
98
99
  cog:
@@ -21,16 +21,19 @@ module Geoblacklight
21
21
  delivered via CDN.
22
22
  DESCRIPTION
23
23
 
24
- # Switch bootstrap import to ESM version so we can import individual parts
24
+ # Switch Blacklight's bootstrap and popper imports to ESM versions so we
25
+ # can import individual modules
25
26
  def use_bootstrap_esm
26
- gsub_file "config/importmap.rb", /dist\/js\/bootstrap\.js/, "dist/js/bootstrap.esm.js"
27
+ gsub_file "config/importmap.rb", %r{dist/js/bootstrap.js}, "dist/js/bootstrap.esm.js"
28
+ gsub_file "config/importmap.rb", %r{dist/umd/popper.min.js}, "dist/esm/popper.js"
27
29
  end
28
30
 
29
- # Add the customization overrides and insert before bootstrap import
31
+ # Add the SCSS customization overrides and insert before bootstrap import
30
32
  def add_customizations
31
33
  copy_file "assets/_customizations.scss", "app/assets/stylesheets/_customizations.scss"
32
34
  gsub_file "app/assets/stylesheets/_customizations.scss", "@geoblacklight/frontend/app/assets/", ""
33
- insert_into_file "app/assets/stylesheets/application.bootstrap.scss", "@import 'customizations';\n", before: "@import 'bootstrap/scss/bootstrap';"
35
+ insert_into_file "app/assets/stylesheets/application.bootstrap.scss", "@import 'customizations';\n",
36
+ before: "@import 'bootstrap/scss/bootstrap';"
34
37
  end
35
38
 
36
39
  # Add CDN imports for CSS files used by Geoblacklight (leaflet, openlayers)
@@ -38,9 +41,9 @@ module Geoblacklight
38
41
  insert_into_file "app/assets/stylesheets/application.bootstrap.scss", before: "@import 'customizations';\n" do
39
42
  <<~SCSS
40
43
  /* GeoBlacklight dependencies CSS */
41
- @import url("https://cdn.skypack.dev/leaflet@1.9.4/dist/leaflet.css");
42
- @import url("https://cdn.jsdelivr.net/npm/leaflet-fullscreen@1.0.2/dist/leaflet.fullscreen.css");
43
- @import url("https://cdn.skypack.dev/ol@8.1.0/ol.css");
44
+ @import url("https://cdn.jsdelivr.net/npm/leaflet@1.9.4/dist/leaflet.css");
45
+ @import url("https://cdn.jsdelivr.net/npm/leaflet.fullscreen@5.3.0/dist/Control.FullScreen.css");
46
+ @import url("https://cdn.jsdelivr.net/npm/ol@8.1.0/ol.css");
44
47
 
45
48
  SCSS
46
49
  end
@@ -16,8 +16,8 @@ module Geoblacklight
16
16
  SCSS entrypoint file, which will be bundled by Vite.
17
17
 
18
18
  Geoblacklight's frontend assets are installed from the npm package. In
19
- local development they automatically reference the versions from the
20
- outer directory (the Geoblacklight repository) via a yarn symlink.
19
+ CI they automatically reference the versions from the outer directory
20
+ (the Geoblacklight repository) via a yarn symlink.
21
21
  DESCRIPTION
22
22
 
23
23
  # Install Vite
@@ -26,6 +26,13 @@ module Geoblacklight
26
26
  run "bundle install"
27
27
  end
28
28
 
29
+ # Symlink geoblacklight's frontend assets in CI
30
+ def link_geoblacklight_package
31
+ if options[:test]
32
+ run "yarn link @geoblacklight/frontend"
33
+ end
34
+ end
35
+
29
36
  # Add our version of the Blacklight base layout with Vite helper tags
30
37
  def geoblacklight_base_layout
31
38
  copy_file "base.html.erb", "app/views/layouts/blacklight/base.html.erb"
@@ -4,7 +4,7 @@ module Geoblacklight
4
4
  # Run general asset setup and then delegate to the appropriate generator
5
5
  # Based on Blacklight::AssetsGenerator
6
6
  class AssetsGenerator < Rails::Generators::Base
7
- class_option :"asset-pipeline", type: :string, default: ENV.fetch("ASSET_PIPELINE", "vite"), desc: "Choose the asset pipeline to use (vite or importmap)"
7
+ class_option :"asset-pipeline", type: :string, default: ENV.fetch("ASSET_PIPELINE", "importmap"), desc: "Choose the asset pipeline to use (vite or importmap)"
8
8
  class_option :test, type: :boolean, default: ENV.fetch("CI", false), aliases: "-t", desc: "Indicates that app will be installed in a test environment"
9
9
 
10
10
  # Pick a version of the frontend asset package and install it.
@@ -27,7 +27,7 @@ module Geoblacklight
27
27
  generator = if options[:"asset-pipeline"]
28
28
  "geoblacklight:assets:#{options[:"asset-pipeline"]}"
29
29
  else
30
- "geoblacklight:assets:vite"
30
+ "geoblacklight:assets:importmap"
31
31
  end
32
32
 
33
33
  generate generator, generated_options
@@ -2,7 +2,7 @@
2
2
 
3
3
  // Leaflet, OpenLayers, GeoBlacklight (includes Blacklight and Bootstrap)
4
4
  @import "leaflet/dist/leaflet.css";
5
- @import "leaflet-fullscreen/dist/leaflet.fullscreen.css";
5
+ @import "leaflet.fullscreen/dist/Control.FullScreen.css";
6
6
  @import "ol/ol.css";
7
7
  @import "~/stylesheets/geoblacklight.scss";
8
8
 
@@ -247,6 +247,7 @@ LEAFLET:
247
247
  HOVERTOWAKE: false
248
248
  MESSAGE: 'Click to Wake'
249
249
  BACKGROUND: 'rgba(214, 214, 214, .7)'
250
+ SIDEBAR: false # set to true to display attribute table as sidebar on map
250
251
  LAYERS:
251
252
  DETECT_RETINA: true
252
253
  INDEX:
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Geoblacklight
4
- VERSION = "5.2.0"
4
+ VERSION = "5.3.0"
5
5
  end
data/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@geoblacklight/frontend",
3
3
  "type": "module",
4
- "version": "5.2.0",
4
+ "version": "5.3.0",
5
5
  "license": "Apache-2.0",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -9,8 +9,7 @@
9
9
  "scripts": {
10
10
  "dev": "vite",
11
11
  "build": "vite build",
12
- "watch": "vite build --watch",
13
- "test": "vitest"
12
+ "watch": "vite build --watch"
14
13
  },
15
14
  "files": [
16
15
  "app/assets",
@@ -26,15 +25,13 @@
26
25
  "bootstrap": "^5.3.3",
27
26
  "esri-leaflet": "^3.0.12",
28
27
  "leaflet": "^1.9.4",
29
- "leaflet-iiif": "^3.0.0",
30
- "leaflet-fullscreen": "^1.0.2",
28
+ "leaflet.fullscreen": "^5.3.0",
31
29
  "ol": "10.7.0",
32
30
  "ol-pmtiles": "^2.0.2"
33
31
  },
34
32
  "devDependencies": {
35
33
  "jsdom": "^27.3.0",
36
34
  "rollup-plugin-includepaths": "^0.2.4",
37
- "vite": "^7.2.2",
38
- "vitest": "^4.0.15"
35
+ "vite": "^7.2.2"
39
36
  }
40
37
  }
@@ -190,8 +190,8 @@
190
190
  "type": "string",
191
191
  "const": "Aardvark"
192
192
  },
193
- "gbl_suppressed_b": { "type": "boolean" },
194
- "gbl_georeferenced_b": { "type": "boolean" }
193
+ "gbl_suppressed_b": { "type": ["string", "boolean"] },
194
+ "gbl_georeferenced_b": { "type": ["string", "boolean"] }
195
195
  },
196
196
  "required": ["id", "dct_title_s", "gbl_resourceClass_sm", "dct_accessRights_s", "gbl_mdVersion_s"]
197
197
  }
@@ -5,20 +5,18 @@ require "spec_helper"
5
5
  feature "Leaflet fullscreen control", js: true do
6
6
  scenario "WMS layer should have full screen control" do
7
7
  visit solr_document_path("stanford-cz128vq0535")
8
- expect(page).to have_css(".leaflet-control-fullscreen-button", visible: :all)
8
+ expect(page).to have_css(".leaflet-control-zoom-fullscreen", visible: :all)
9
9
  end
10
10
  end
11
11
 
12
- feature "Clover IIIF fullscreen control", js: true do
12
+ feature "IIIF fullscreen control", js: true do
13
13
  scenario "IIIF layer should have full screen control" do
14
- skip "Clover is disabled" # see https://github.com/geoblacklight/geoblacklight/issues/1675
15
14
  visit solr_document_path("princeton-sx61dn82p")
16
- expect(page).to have_button("Toggle full page")
15
+ expect(page).to have_button("Full screen", visible: :all)
17
16
  end
18
17
 
19
18
  scenario "IIIF image should have full screen control" do
20
- skip "Clover is disabled" # see https://github.com/geoblacklight/geoblacklight/issues/1675
21
19
  visit solr_document_path("princeton-02870w62c")
22
- expect(page).to have_css("[data-button='full-page']")
20
+ expect(page).to have_css("img[alt='Toggle full page']", visible: :all)
23
21
  end
24
22
  end
@@ -4,14 +4,7 @@ require "spec_helper"
4
4
 
5
5
  feature "saved searches" do
6
6
  scenario "list spatial search", js: true do
7
- visit root_path
8
- within "#leaflet-viewer" do
9
- find(".search-control a").click
10
- expect(page.current_url).to match(/bbox=/)
11
- end
12
- if Rails.version == "6.1.7.6"
13
- visit root_path({bbox: "-180 -89.338214 180 88.918831"})
14
- end
7
+ visit root_path({bbox: "-180 -89.338214 180 88.918831"})
15
8
  visit blacklight.search_history_path
16
9
  expect(page).to have_css "td.query a", text: /#{I18n.t("geoblacklight.bbox_label")}/
17
10
  end
data/vite.config.ts CHANGED
@@ -28,8 +28,5 @@ export default defineConfig(() => {
28
28
  ],
29
29
  },
30
30
  },
31
- test: {
32
- environment: "jsdom",
33
- },
34
31
  };
35
32
  });
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: 5.2.0
4
+ version: 5.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Graves
@@ -10,7 +10,7 @@ authors:
10
10
  - Jack Reed
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2026-02-18 00:00:00.000000000 Z
13
+ date: 2026-05-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
@@ -483,6 +483,8 @@ files:
483
483
  - app/components/blacklight/icons/uva_component.rb
484
484
  - app/components/blacklight/icons/web_services_component.rb
485
485
  - app/components/blacklight/icons/websites_component.rb
486
+ - app/components/geoblacklight/accordion_component.html.erb
487
+ - app/components/geoblacklight/accordion_component.rb
486
488
  - app/components/geoblacklight/arcgis_component.html.erb
487
489
  - app/components/geoblacklight/arcgis_component.rb
488
490
  - app/components/geoblacklight/attribute_table_component.html.erb
@@ -557,6 +559,7 @@ files:
557
559
  - app/javascript/geoblacklight/leaflet/constants.js
558
560
  - app/javascript/geoblacklight/leaflet/controls/geosearch.js
559
561
  - app/javascript/geoblacklight/leaflet/controls/layer_opacity.js
562
+ - app/javascript/geoblacklight/leaflet/controls/sidebar.js
560
563
  - app/javascript/geoblacklight/leaflet/controls/sleep.js
561
564
  - app/javascript/geoblacklight/leaflet/inspection.js
562
565
  - app/javascript/geoblacklight/leaflet/layer_index_map.js
@@ -927,7 +930,6 @@ files:
927
930
  - spec/tasks/geoblacklight_spec.rb
928
931
  - spec/test_app_templates/lib/generators/test_app_generator.rb
929
932
  - template.rb
930
- - test/leaflet/layers.test.js
931
933
  - vite.config.ts
932
934
  homepage: http://github.com/geoblacklight/geoblacklight
933
935
  licenses:
@@ -1,17 +0,0 @@
1
- import { wmsLayer, wmtsLayer } from "../../app/javascript/leaflet/layers";
2
- import { describe, expect, it } from "vitest";
3
-
4
- describe("leaflet/layers", () => {
5
- describe("wmsLayer", () => {
6
- it("returns a WMS tile layer", () => {
7
- const url = "http://example.com/wms";
8
- const layerId = "layerId";
9
- const opacity = 0.5;
10
- const detectRetina = true;
11
- const layer = wmsLayer(url, { layerId, opacity, detectRetina });
12
- expect(layer.options.layers).toEqual(layerId);
13
- expect(layer.options.opacity).toEqual(opacity);
14
- expect(layer.options.detectRetina).toEqual(detectRetina);
15
- });
16
- });
17
- });