From daf1601cffcbcf00d3e8a1c5b43af3b7444890d1 Mon Sep 17 00:00:00 2001 From: Jim Safley Date: Sat, 1 Jun 2024 07:32:33 -0400 Subject: [PATCH] Add site config for IIIF viewer --- .../src/Controller/IiifViewerController.php | 3 ++ application/src/Form/SiteSettingsForm.php | 29 +++++++++++++++++++ .../src/Media/Renderer/IiifPresentation.php | 20 +++++++++++-- 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/application/src/Controller/IiifViewerController.php b/application/src/Controller/IiifViewerController.php index 4b08607e81..4c9694baa7 100644 --- a/application/src/Controller/IiifViewerController.php +++ b/application/src/Controller/IiifViewerController.php @@ -49,6 +49,9 @@ public function indexAction() if (isset($miradorConfigUser['window.sideBarOpen'])) { $miradorConfig['window']['sideBarOpen'] = $miradorConfigUser['window.sideBarOpen']; } + if (isset($miradorConfigUser['selectedTheme'])) { + $miradorConfig['selectedTheme'] = $miradorConfigUser['selectedTheme']; + } $view = new ViewModel; $view->setTerminal(true); diff --git a/application/src/Form/SiteSettingsForm.php b/application/src/Form/SiteSettingsForm.php index 97f7f74356..eb75389c49 100644 --- a/application/src/Form/SiteSettingsForm.php +++ b/application/src/Form/SiteSettingsForm.php @@ -33,6 +33,7 @@ public function init() 'browse' => 'Browse', // @translate 'show' => 'Show', // @translate 'search' => 'Search', // @translate + 'iiif_viewer' => 'IIIF viewer', // @translate ]); // o:assign_new_items element is a pseudo-setting that's ultimately set @@ -424,6 +425,34 @@ public function init() ], ]); + // IIIF viewer section + $this->add([ + 'type' => 'checkbox', + 'name' => 'iiif_viewer_sidebar', + 'options' => [ + 'element_group' => 'iiif_viewer', + 'label' => 'Show sidebar', // @translate + ], + 'attributes' => [ + 'value' => $settings->get('iiif_viewer_sidebar', false), + ], + ]); + $this->add([ + 'type' => 'select', + 'name' => 'iiif_viewer_theme', + 'options' => [ + 'element_group' => 'iiif_viewer', + 'label' => 'Theme', // @translate + 'value_options' => [ + 'light' => 'Light', // @translate + 'dark' => 'Dark', // @translate + ], + ], + 'attributes' => [ + 'value' => $settings->get('iiif_viewer_theme'), + ], + ]); + $addEvent = new Event('form.add_elements', $this); $this->getEventManager()->triggerEvent($addEvent); diff --git a/application/src/Media/Renderer/IiifPresentation.php b/application/src/Media/Renderer/IiifPresentation.php index 2ad581b218..34d643a2f6 100644 --- a/application/src/Media/Renderer/IiifPresentation.php +++ b/application/src/Media/Renderer/IiifPresentation.php @@ -8,11 +8,25 @@ class IiifPresentation implements RendererInterface { public function render(PhpRenderer $view, MediaRepresentation $media, array $options = []) { + $miradorConfig = [ + 'window.sideBarOpen' => false, + 'selectedTheme' => 'light', + ]; + if ($view->status()->isSiteRequest()) { + // Respect site settings for the IIIF viewer. + $miradorConfig['window.sideBarOpen'] = (bool) $view->siteSetting('iiif_viewer_sidebar', false); + switch ($view->siteSetting('iiif_viewer_theme', 'light')) { + case 'dark': + $miradorConfig['selectedTheme'] = 'dark'; + break; + case 'light': + default: + $miradorConfig['selectedTheme'] = 'light'; + } + } $query = [ 'url' => $media->source(), - 'mirador_config' => json_encode([ - 'window.sideBarOpen' => false, - ]), + 'mirador_config' => json_encode($miradorConfig), ]; return $view->iiifViewer($query, $options); }