Skip to content

Commit 4a8beac

Browse files
committed
use Mirador for file systems and permit PCDM dc types to render in Mirador
- remove archival-iiif pending authz and plugin capability - bump cul-mirador fork version - DLC-1008
1 parent 8264633 commit 4a8beac

File tree

8 files changed

+110
-202
lines changed

8 files changed

+110
-202
lines changed

Gemfile

+1
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ gem "devise-guests", "~> 0.3"
9393
gem 'rubyzip', '>= 1.2.1'
9494
gem 'rack-protection', '>= 1.5.5'
9595
gem 'loofah', '>= 2.2.1'
96+
gem 'best_type'
9697

9798
group :development, :test do
9899
# Use Capistrano for deployment

Gemfile.lock

+3
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ GEM
8989
sshkit (>= 1.6.1, != 1.7.0)
9090
ast (2.4.2)
9191
bcrypt (3.1.19)
92+
best_type (1.0.1)
93+
mime-types (~> 3.4)
9294
bigdecimal (3.1.4)
9395
blacklight (7.33.1)
9496
deprecation
@@ -500,6 +502,7 @@ DEPENDENCIES
500502
active-fedora (~> 8.7)
501503
active-triples!
502504
addressable (~> 2.8.0)
505+
best_type
503506
bigdecimal (~> 3.0)
504507
blacklight (~> 7.33.1)
505508
bootsnap (~> 1.9.3)

app/assets/stylesheets/iiif.scss

+1-7
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,9 @@
1616
@import "@archival-iiif/viewer-react/dist/viewer/media/transcription.css";
1717
@import "@archival-iiif/viewer-react/dist/topBar/fullscreen.css";
1818
@import "@archival-iiif/viewer-react/dist/topBar/topbar.css";
19-
#mirador {
19+
#mirador, #aiiif {
2020
height: 80vh;
2121
.mosaic-root {
2222
inset: 0px;
2323
}
2424
}
25-
26-
.aiiif-root {
27-
p {
28-
margin-top: initial;
29-
}
30-
}

app/helpers/children_helper.rb

+11-1
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,18 @@ def has_public_children?(document: @document, children: nil, ability: Ability.ne
9393
children.detect { |child| is_publicly_available_asset?(child, ability) }.present?
9494
end
9595

96+
def structured_children_of document, &block
97+
structured_children(document)&.select &block
98+
end
99+
96100
def structured_children_of_type(document: @document, dc_type:)
97-
structured_children(document)&.select { |child| Array(child[:dc_type_sim]).include?(dc_type) }
101+
structured_children_of(@document) { |child| Array(child[:dc_type_sim]).include?(dc_type) }
102+
end
103+
104+
def structured_children_of_valid_types(document: @document)
105+
structured_children_of(@document) do |child|
106+
Array(child[:dc_type_sim]).detect { |dct| BestType.dc_type.valid_type?(dct) || BestType.pcdm_type.valid_type?(dct) }
107+
end
98108
end
99109

100110
def structured_children_not_type(document: @document, dc_type:)

app/javascript/iiif-archives.js

+78-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,82 @@
1-
import ArchivalIIIFViewer from "@archival-iiif/viewer-react";
1+
import Mirador from '@columbia-libraries/mirador/dist/es/src';
2+
import miradorDownloadPlugins from '@columbia-libraries/mirador/dist/es/src/culPlugins/mirador-downloaddialog';
3+
import canvasRelatedLinksPlugin from '@columbia-libraries/mirador/dist/es/src/culPlugins/mirador-canvasRelatedLinks'
4+
import citationSidebar from '@columbia-libraries/mirador/dist/es/src/culPlugins/mirador-citations';
5+
import hintingSidebar from '@columbia-libraries/mirador/dist/es/src/culPlugins/mirador-hinting-sidebar';
6+
import videoJSPlugin from '@columbia-libraries/mirador/dist/es/src/culPlugins/mirador-videojs';
7+
import viewerNavigation from '@columbia-libraries/mirador/dist/es/src/culPlugins/mirador-pageIconViewerNavigation';
8+
import viewXmlPlugin from '@columbia-libraries/mirador/dist/es/src/culPlugins/mirador-viewXml';
9+
import collectionFoldersPlugin from '@columbia-libraries/mirador/dist/es/src/culPlugins/mirador-selectCollectionFolders';
10+
const flattenPluginConfigs = (...plugins) => plugins.reduce(
11+
(acc, curr) => {
12+
return acc.concat([...curr])
13+
}, []
14+
);
15+
216
$(document).ready(function(){
3-
var manifestUrl = $('#aiiif').data('manifest');
17+
const manifestUrl = $('#aiiif').data('manifest');
418
if (manifestUrl) {
5-
new ArchivalIIIFViewer({id: 'aiiif', manifest: manifestUrl});
19+
const numChildren = $('#aiiif').data('num-children');
20+
const startCanvas = function(queryParams) {
21+
if (queryParams.get("canvas")) {
22+
const canvases = queryParams.get("canvas").split(',');
23+
const canvas = canvases[0];
24+
return canvas.startsWith('../') ? manifestUrl.replace('/manifest', canvas.slice(2)) : canvas;
25+
} else return null;
26+
}(new URL(document.location).searchParams);
27+
const viewConfig = {};
28+
if (numChildren && numChildren === 1) {
29+
viewConfig.views = [
30+
{ key: 'single' }
31+
];
32+
viewConfig.defaultView = 'single';
33+
}
34+
Mirador.viewer(
35+
{
36+
id: 'aiiif',
37+
window: {
38+
allowClose: false,
39+
allowFullscreen: true,
40+
allowMaximize: false,
41+
panels: {
42+
info: true,
43+
canvas: true
44+
},
45+
canvasLink: {
46+
active: true,
47+
enabled: true,
48+
singleCanvasOnly: false,
49+
providers: [],
50+
getCanvasLink: (manifestId, canvases) => {
51+
const baseUri = window.location.href.replace(window.location.search, '');
52+
const canvasIndices = canvases.map(
53+
(canvas) => canvas.id.startsWith(manifestId.replace('/manifest', '')) ? '../canvas/' + canvas.id.split("/").slice(-2).join('/') : canvas.id,
54+
);
55+
return `${baseUri}?canvas=${canvasIndices.join(",",)}`;
56+
}
57+
},
58+
...viewConfig,
59+
},
60+
windows: [
61+
{
62+
manifestId: manifestUrl,
63+
canvasId: startCanvas,
64+
}
65+
],
66+
workspace: {
67+
showZoomControls: true,
68+
},
69+
workspaceControlPanel: {
70+
enabled: false
71+
},
72+
miradorDownloadPlugin: {
73+
restrictDownloadOnSizeDefinition: true,
74+
},
75+
translations: {
76+
en: { openCompanionWindow_citation: "Citation" },
77+
},
78+
},
79+
flattenPluginConfigs(canvasRelatedLinksPlugin, citationSidebar, collectionFoldersPlugin, hintingSidebar, miradorDownloadPlugins, videoJSPlugin, viewerNavigation, viewXmlPlugin),
80+
);
681
}
782
});

app/views/shared/_head_includes.html.erb

+2-3
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,8 @@ DLC VERSION: <%= IO.read(Rails.root.to_s+'/VERSION') %> -->
3030
<%= stylesheet_link_tag "dcv", media: 'all' %>
3131
<%= stylesheet_link_tag "print", media: 'print' %>
3232
<%- is_iiif_client = @document&.fetch('iiif_behavior_ssim', nil).present? -%>
33-
<%- ['StillImage', 'Sound', 'MovingImage', 'Text'].each do |dc_type| -%>
34-
<%- is_iiif_client ||= Array(@document&.fetch(:dc_type_sim, nil)).include?(dc_type) -%>
35-
<%- is_iiif_client ||= Array(@document&.fetch(:dc_type_sim, nil)).include?('InteractiveResource') && structured_children_of_type(document: @document || {}, dc_type: dc_type).present? -%>
33+
<%- if !is_iiif_client && Array(@document&.fetch(:dc_type_sim, nil)).detect { |x| BestType.dc_type.valid_type?(x) || BestType.pcdm_type.valid_type?(x) } -%>
34+
<%- is_iiif_client ||= Array(@document&.fetch(:dc_type_sim, nil)).include?('InteractiveResource') ? structured_children_of_valid_types(@document).present? : true -%>
3635
<%- end -%>
3736
<%- is_iiif_client ||= archive_org_id_for_document(@document) -%>
3837
<%- is_file_system = is_file_system?(@document) -%>

package.json

+2-3
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,14 @@
33
"private": true,
44
"version": "0.1.0",
55
"dependencies": {
6-
"@archival-iiif/viewer-react": "^3.1.0",
76
"@babel/core": "^7.22.17",
87
"@babel/plugin-transform-runtime": "^7.22.15",
98
"@babel/preset-env": "^7.22.15",
109
"@babel/preset-react": "^7.22.15",
1110
"@babel/runtime": "^7.22.15",
1211
"@blueprintjs/core": "^5.3.0",
1312
"@blueprintjs/icons": "^5.1.6",
14-
"@columbia-libraries/mirador": "3.3.1-3789.11",
13+
"@columbia-libraries/mirador": "3.3.1-3789.12",
1514
"@emotion/react": "^11.10.6",
1615
"@emotion/styled": "^11.10.6",
1716
"@fortawesome/fontawesome-free": "6.4.2",
@@ -77,7 +76,7 @@
7776
"devDependencies": {
7877
"@emotion/babel-preset-css-prop": "^11.11.0",
7978
"@webpack-cli/serve": "^2.0.5",
80-
"@columbia-libraries/mirador": "3.3.1-3789.11",
79+
"@columbia-libraries/mirador": "3.3.1-3789.12",
8180
"react": "^18.2.0",
8281
"react-dom": "^18.2.0",
8382
"webpack-dev-server": "^4.15.1"

0 commit comments

Comments
 (0)