diff --git a/modules/islandora_advanced_search/islandora_advanced_search.module b/modules/islandora_advanced_search/islandora_advanced_search.module
index 7bae23cd..f08dd346 100644
--- a/modules/islandora_advanced_search/islandora_advanced_search.module
+++ b/modules/islandora_advanced_search/islandora_advanced_search.module
@@ -13,51 +13,13 @@
*/
use Drupal\block\Entity\Block;
-use Drupal\Component\Utility\Unicode;
use Drupal\Core\Form\FormStateInterface;
use Drupal\islandora_advanced_search\AdvancedSearchQuery;
-use Drupal\islandora_advanced_search\Form\SettingsForm;
use Drupal\islandora_advanced_search\Utilities;
use Drupal\search_api\Query\QueryInterface as DrupalQueryInterface;
use Drupal\views\ViewExecutable;
use Solarium\Core\Query\QueryInterface as SolariumQueryInterface;
-/**
- * Implements hook_theme().
- */
-function islandora_advanced_search_theme() {
- return [
- 'facets_item_list__include_exclude_links' => [
- 'template' => 'facets/facets-item-list--include-exclude-links',
- 'base hook' => 'facets_item_list',
- ],
- 'facets_result_item__include_exclude_links' => [
- 'template' => 'facets/facets-result-item--include-exclude-links',
- 'base hook' => 'facets_result_item',
- ],
- 'facets_result_item__summary' => [
- 'template' => 'facets/facets-result-item--summary',
- 'base hook' => 'facets_result_item',
- ],
- ];
-}
-
-/**
- * Implements hook_library_info_alter().
- */
-function islandora_advanced_search_library_info_alter(&$libraries, $extension) {
- if ($extension == 'facets') {
- // Override facets module javascript with customizations.
- $path = '/' . \Drupal::service('extension.list.module')->getPath('islandora_advanced_search') . '/js/facets';
- $libraries['soft-limit']['js'] = [
- "$path/soft-limit.js" => [],
- ];
- $libraries['drupal.facets.views-ajax']['js'] = [
- "$path/facets-views-ajax.js" => [],
- ];
- }
-}
-
/**
* Implements hook_search_api_solr_converted_query_alter().
*/
@@ -99,20 +61,6 @@ function islandora_advanced_search_form_block_form_alter(&$form, FormStateInterf
$form['visibility'][$condition_id] = $condition_form;
}
-/**
- * Implements hook_preprocess_block__facets_summary().
- */
-function islandora_advanced_search_preprocess_block__facets_summary(&$variables) {
- // Copy data-attributes to the content as the javascript expects
- // there to be no elements between the data declaration and the
- // content of the block.
- foreach ($variables['attributes'] as $key => $value) {
- if (substr($key, 0, 4) === "data") {
- $variables['content_attributes'][$key] = $value;
- }
- }
-}
-
/**
* Implements hook_preprocess_preprocess_views_view().
*/
@@ -139,53 +87,3 @@ function islandora_advanced_search_views_pre_view(ViewExecutable $view, $display
$advanced_search_query = new AdvancedSearchQuery();
$advanced_search_query->alterView(\Drupal::request(), $view, $display_id);
}
-
-/**
- * Implements hook_preprocess_facets_summary_item_list().
- */
-function islandora_advanced_search_preprocess_facets_summary_item_list(&$variables) {
- foreach ($variables['items'] as &$item) {
- $item['attributes']['class'][] = 'facet-summary-item';
- }
-}
-
-/**
- * Implements hook_preprocess_facets_item_list().
- */
-function islandora_advanced_search_preprocess_facets_item_list(&$variables) {
- $widget = $variables['facet']->getWidget();
- $soft_limit = $widget['config']['soft_limit'];
- // Break into two groups less / more which can display be toggled as a single
- // element change rather than showing / hiding all
elements individually.
- // As its slow and causes the page to snap when loading.
- $variables['less'] = array_slice($variables['items'], 0, $soft_limit);
- $variables['more'] = array_slice($variables['items'], $soft_limit);
- $variables['show_more_label'] = $widget['config']['soft_limit_settings']['show_more_label'];
-}
-
-/**
- * Implements hook_preprocess_facets_result_item().
- */
-function islandora_advanced_search_preprocess_facets_result_item(&$variables) {
- $settings = \Drupal::config(SettingsForm::CONFIG_NAME);
- $length = $settings->get(SettingsForm::FACET_TRUNCATE);
- if (is_numeric($length)) {
- // Limit the length of facets display to at most 32 characters.
- if (is_string($variables['value'])) {
- $variables['value'] = Unicode::truncate(
- $variables['value'],
- $length,
- TRUE,
- TRUE
- );
- }
- elseif (is_string($variables['value']['text']['#title'])) {
- $variables['value']['text']['#title'] = Unicode::truncate(
- $variables['value']['text']['#title'],
- $length,
- TRUE,
- TRUE
- );
- }
- }
-}
diff --git a/modules/islandora_advanced_search/js/facets/facets-views-ajax.js b/modules/islandora_advanced_search/js/facets/facets-views-ajax.js
deleted file mode 100644
index 0b04ea33..00000000
--- a/modules/islandora_advanced_search/js/facets/facets-views-ajax.js
+++ /dev/null
@@ -1,147 +0,0 @@
-//# sourceURL=modules/contrib/islandora/modules/islandora_advanced_search/js/facets/facets-view.ajax.js
-/**
- * @file
- * Overrides the facets-view-ajax.js behavior from the 'facets' module.
- */
-(function ($, Drupal) {
- "use strict";
-
- // Generate events on push state.
- (function (history) {
- var pushState = history.pushState;
- history.pushState = function (state, title, url) {
- var ret = pushState.apply(this, arguments);
- var event = new Event("pushstate");
- window.dispatchEvent(event);
- return ret;
- };
- })(window.history);
-
- function reload(url) {
- // Update View.
- if (drupalSettings && drupalSettings.views && drupalSettings.views.ajaxViews) {
- var view_path = drupalSettings.views.ajax_path;
- $.each(drupalSettings.views.ajaxViews, function (views_dom_id) {
- var views_parameters = Drupal.Views.parseQueryString(url);
- var views_arguments = Drupal.Views.parseViewArgs(url, "search");
- var views_settings = $.extend(
- {},
- Drupal.views.instances[views_dom_id].settings,
- views_arguments,
- views_parameters
- );
- var views_ajax_settings =
- Drupal.views.instances[views_dom_id].element_settings;
- views_ajax_settings.submit = views_settings;
- views_ajax_settings.url =
- view_path + "?" + $.param(Drupal.Views.parseQueryString(url));
- Drupal.ajax(views_ajax_settings).execute();
- });
- }
-
- // Replace filter, pager, summary, and facet blocks.
- var blocks = {};
- $(
- ".block[class*='block-plugin-id--islandora-advanced-search-result-pager'], .block[class*='block-plugin-id--views-exposed-filter-block'], .block[class*='block-plugin-id--facet']"
- ).each(function () {
- var id = $(this).attr("id");
- var block_id = id
- .slice("block-".length, id.length)
- .replace(/--.*$/g, "")
- .replace(/-/g, "_");
- blocks[block_id] = "#" + id;
- });
- Drupal.ajax({
- url: Drupal.url("islandora-advanced-search-ajax-blocks"),
- submit: {
- link: url,
- blocks: blocks,
- },
- }).execute();
- }
-
- // On location change reload all the blocks / ajax view.
- window.addEventListener("pushstate", function (e) {
- reload(window.location.href);
- });
-
- window.addEventListener("popstate", function (e) {
- if (e.state != null) {
- reload(window.location.href);
- }
- });
-
- /**
- * Push state on form/pager/facet change.
- */
- Drupal.behaviors.islandoraAdvancedSearchViewsAjax = {
- attach: function (context, settings) {
- window.historyInitiated = true;
-
- // Remove existing behavior from form.
- if (settings && settings.views && settings.views.ajaxViews) {
- $.each(settings.views.ajaxViews, function (index, settings) {
- var exposed_form = $(
- "form#views-exposed-form-" +
- settings.view_name.replace(/_/g, "-") +
- "-" +
- settings.view_display_id.replace(/_/g, "-")
- );
- exposed_form
- .once()
- .find("input[type=submit], input[type=image]")
- .not("[data-drupal-selector=edit-reset]")
- .each(function (index) {
- $(this).unbind("click");
- $(this).click(function (e) {
- // Let ctrl/cmd click open in a new window.
- if (e.shiftKey || e.ctrlKey || e.metaKey) {
- return;
- }
- e.preventDefault();
- e.stopPropagation();
- var href = window.location.href;
- var params = Drupal.Views.parseQueryString(href);
- // Remove the page if set as submitting the form should always take
- // the user to the first page (facets do the same).
- delete params.page;
- // Include values from the form in the URL.
- $.each(exposed_form.serializeArray(), function () {
- params[this.name] = this.value;
- });
- href = href.split("?")[0] + "?" + $.param(params);
- window.history.pushState(null, document.title, href);
- });
- });
- });
- }
-
- // Attach behavior to pager, summary, facet links.
- $("[data-drupal-pager-id], [data-drupal-facets-summary-id], [data-drupal-facet-id]")
- .once()
- .find("a:not(.facets-soft-limit-link)")
- .click(function (e) {
- // Let ctrl/cmd click open in a new window.
- if (e.shiftKey || e.ctrlKey || e.metaKey) {
- return;
- }
- e.preventDefault();
- window.history.pushState(null, document.title, $(this).attr("href"));
- });
-
- // Trigger on sort change.
- $('[data-drupal-pager-id] select[name="order"]')
- .once()
- .change(function () {
- var href = window.location.href;
- var params = Drupal.Views.parseQueryString(href);
- var selection = $(this).val();
- var option = $('option[value="' + selection + '"]');
- params.sort_order = option.data("sort_order");
- params.sort_by = option.data("sort_by");
- href = href.split("?")[0] + "?" + $.param(params);
- window.history.pushState(null, document.title, href);
- });
- },
- };
-})(jQuery, Drupal);
diff --git a/modules/islandora_advanced_search/js/facets/soft-limit.js b/modules/islandora_advanced_search/js/facets/soft-limit.js
deleted file mode 100644
index a81a267c..00000000
--- a/modules/islandora_advanced_search/js/facets/soft-limit.js
+++ /dev/null
@@ -1,70 +0,0 @@
-//# sourceURL=modules/contrib/islandora/modules/islandora_advanced_search/js/facets/soft-limit.js
-/**
- * @file
- * Overrides the soft-limit.js behavior from the 'facets' module.
- * As when having many facets the original version causes the page to slow down and snap to hidden when rendering.
- */
-(function ($) {
-
- 'use strict';
-
- Drupal.behaviors.facetSoftLimit = {
- attach: function (context, settings) {
- if (settings.facets.softLimit !== 'undefined') {
- $.each(settings.facets.softLimit, function (facet, limit) {
- Drupal.facets.applySoftLimit(facet, limit, settings);
- });
- }
- }
- };
-
- Drupal.facets = Drupal.facets || {};
-
- /**
- * Applies the soft limit UI feature to a specific facets list.
- *
- * @param {string} facet
- * The facet id.
- * @param {string} limit
- * The maximum amount of items to show.
- * @param {object} settings
- * Settings.
- */
- Drupal.facets.applySoftLimit = function (facet, limit, settings) {
- var zero_based_limit = (limit - 1);
- var facet_id = facet;
- var facetsList = $('ul[data-drupal-facet-id="' + facet_id + '"]');
-
- // In case of multiple instances of a facet, we need to key them.
- if (facetsList.length > 1) {
- facetsList.each(function (key, $value) {
- $(this).attr('data-drupal-facet-id', facet_id + '-' + key);
- });
- }
-
- // Add "Show more" / "Show less" links.
- facetsList.filter(function () {
- return $(this).next('ul').length == 1; // Has expanding list.
- }).each(function () {
- var facet = $(this);
- var expand = facet.next('ul');
- var link = expand.next('a');
- var showLessLabel = settings.facets.softLimitSettings[facet_id].showLessLabel;
- var showMoreLabel = settings.facets.softLimitSettings[facet_id].showMoreLabel;
- link.text(showMoreLabel)
- .once()
- .on('click', function () {
- if (!expand.is(":visible")) {
- expand.slideDown();
- $(this).addClass('open').text(showLessLabel);
- }
- else {
- expand.slideUp();
- $(this).removeClass('open').text(showMoreLabel);
- }
- return false;
- })
- });
- };
-
-})(jQuery);
diff --git a/modules/islandora_iiif/src/Plugin/views/style/IIIFManifest.php b/modules/islandora_iiif/src/Plugin/views/style/IIIFManifest.php
index 63f015d1..b76628d7 100644
--- a/modules/islandora_iiif/src/Plugin/views/style/IIIFManifest.php
+++ b/modules/islandora_iiif/src/Plugin/views/style/IIIFManifest.php
@@ -93,10 +93,17 @@ class IIIFManifest extends StylePluginBase {
*/
protected $messenger;
+ /**
+ * Module Handler for running hooks.
+ *
+ * @var \Drupal\Core\Extention\ModuleHandlerInterface
+ */
+ protected $moduleHandler;
+
/**
* {@inheritdoc}
*/
- public function __construct(array $configuration, $plugin_id, $plugin_definition, SerializerInterface $serializer, Request $request, ImmutableConfig $iiif_config, EntityTypeManagerInterface $entity_type_manager, FileSystemInterface $file_system, Client $http_client, MessengerInterface $messenger) {
+ public function __construct(array $configuration, $plugin_id, $plugin_definition, SerializerInterface $serializer, Request $request, ImmutableConfig $iiif_config, EntityTypeManagerInterface $entity_type_manager, FileSystemInterface $file_system, Client $http_client, MessengerInterface $messenger, ModuleHandlerInterface $moduleHandler) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->serializer = $serializer;
@@ -106,6 +113,7 @@ class IIIFManifest extends StylePluginBase {
$this->fileSystem = $file_system;
$this->httpClient = $http_client;
$this->messenger = $messenger;
+ $this->moduleHandler = $moduleHandler;
}
/**
@@ -122,10 +130,21 @@ class IIIFManifest extends StylePluginBase {
$container->get('entity_type.manager'),
$container->get('file_system'),
$container->get('http_client'),
- $container->get('messenger')
+ $container->get('messenger'),
+ $container->get('module_handler')
);
}
+ /**
+ * Return the request property.
+ *
+ * @return \Symfony\Component\HttpFoundation\Request
+ * The Symfony request object
+ */
+ public function getRequest() {
+ return $this->request;
+ }
+
/**
* {@inheritdoc}
*/
@@ -172,6 +191,9 @@ class IIIFManifest extends StylePluginBase {
$content_type = 'json';
+ // Give other modules a chance to alter the manifest.
+ $this->moduleHandler->alter('islandora_iiif_manifest', $json, $this);
+
return $this->serializer->serialize($json, $content_type, ['views_style_plugin' => $this]);
}
@@ -255,6 +277,13 @@ class IIIFManifest extends StylePluginBase {
];
}
+ // Give other modules a chance to alter the canvas.
+ $alter_options = [
+ 'options' => $this->options,
+ 'views_plugin' => $this,
+ ];
+ $this->moduleHandler->alter('islandora_iiif_manifest_canvas', $tmp_canvas, $row, $alter_options);
+
$canvases[] = $tmp_canvas;
}
}