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 +4 -4
- data/.github/workflows/ruby.yml +4 -4
- data/app/assets/stylesheets/geoblacklight/modules/item.scss +20 -3
- data/app/components/geoblacklight/accordion_component.html.erb +16 -0
- data/app/components/geoblacklight/accordion_component.rb +11 -0
- data/app/components/geoblacklight/attribute_table_component.html.erb +15 -17
- data/app/components/geoblacklight/index_map_inspect_component.html.erb +4 -3
- data/app/javascript/geoblacklight/controllers/leaflet_viewer_controller.js +17 -3
- data/app/javascript/geoblacklight/leaflet/controls/sidebar.js +47 -0
- data/config/importmap.rb +4 -10
- data/config/locales/geoblacklight.en.yml +1 -0
- data/lib/generators/geoblacklight/assets/importmap_generator.rb +10 -7
- data/lib/generators/geoblacklight/assets/vite_generator.rb +9 -2
- data/lib/generators/geoblacklight/assets_generator.rb +2 -2
- data/lib/generators/geoblacklight/templates/assets/application.scss +1 -1
- data/lib/generators/geoblacklight/templates/settings.yml +1 -0
- data/lib/geoblacklight/version.rb +1 -1
- data/package.json +4 -7
- data/schema/geoblacklight-schema-aardvark.json +2 -2
- data/spec/features/full_screen_control_spec.rb +4 -6
- data/spec/features/saved_searches_spec.rb +1 -8
- data/vite.config.ts +0 -3
- metadata +5 -3
- data/test/leaflet/layers.test.js +0 -17
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2f9e80f30735f8fa8f8e4c03e0a855b4e709acbf1eb860cad0a14e66dba72064
|
|
4
|
+
data.tar.gz: 824c5c71fb501807335ab0862522d5a14fec06f31b1f21b09d732338f27e5b89
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: acbee7539ae6c048356e42467b99f4e94c948cc9d5a35ddeeccc721028965808267d33d3d3ce91fc05afdd5992fbee5edeeda1760aa6257dea6420bc83e194ce
|
|
7
|
+
data.tar.gz: 8395fe82750ac0bfe3dc3de410a7039d0eff671ffee63690f1a0858b88687dc163ed92a711a46a94caf956eb3cdd5b04f7c96cb5a7cf2aedbaec9d74a2136412
|
data/.github/workflows/ruby.yml
CHANGED
|
@@ -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: ["
|
|
43
|
-
additional_engine_cart_rails_options: ["--js
|
|
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: "
|
|
48
|
-
additional_engine_cart_rails_options: "--js
|
|
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>
|
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
<
|
|
3
|
-
<
|
|
4
|
-
<
|
|
5
|
-
<
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
<
|
|
11
|
-
<
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
2
|
-
<div class='viewer-information
|
|
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
|
-
|
|
5
|
+
<% end %>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Icon, Control } from "leaflet";
|
|
2
|
-
import "leaflet
|
|
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
|
|
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.
|
|
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.
|
|
10
|
-
pin "esri-leaflet", to: "https://cdn.
|
|
11
|
-
pin "leaflet
|
|
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"
|
|
@@ -21,16 +21,19 @@ module Geoblacklight
|
|
|
21
21
|
delivered via CDN.
|
|
22
22
|
DESCRIPTION
|
|
23
23
|
|
|
24
|
-
# Switch bootstrap
|
|
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", /
|
|
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",
|
|
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.
|
|
42
|
-
@import url("https://cdn.jsdelivr.net/npm/leaflet
|
|
43
|
-
@import url("https://cdn.
|
|
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
|
-
|
|
20
|
-
|
|
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", "
|
|
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:
|
|
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
|
|
5
|
+
@import "leaflet.fullscreen/dist/Control.FullScreen.css";
|
|
6
6
|
@import "ol/ol.css";
|
|
7
7
|
@import "~/stylesheets/geoblacklight.scss";
|
|
8
8
|
|
data/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geoblacklight/frontend",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "5.
|
|
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
|
|
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
|
|
8
|
+
expect(page).to have_css(".leaflet-control-zoom-fullscreen", visible: :all)
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
feature "
|
|
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("
|
|
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("[
|
|
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
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.
|
|
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-
|
|
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:
|
data/test/leaflet/layers.test.js
DELETED
|
@@ -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
|
-
});
|