Allow page view derived Advanced Search blocks on any page (#843)

* Allow page view derived Advanced Search blocks on any page

Allows the Advanced Search block to be used on pages
where its corresponding view is not present. Now it
will redirect to the route associated with the view
it was generated from.

This is not valid for Advanced Search blocks that
are derived from non-page based views, as there is
no known location in which to redirect the query.

* Fix for undefined index warning.

* Documented Exposed form style settings requirement for Advanced Search.
This commit is contained in:
Nigel Banks 2021-07-29 14:59:28 +01:00 committed by GitHub
parent 1f611a3876
commit 5c6c26f43f
6 changed files with 96 additions and 16 deletions

View file

@ -7,7 +7,8 @@
// Gets current parameters minus ones provided by the form.
function getParams(query_parameter, recurse_parameter) {
var params = Drupal.Views.parseQueryString(window.location.href);
const url_search_params = new URLSearchParams(window.location.search);
const params = Object.fromEntries(url_search_params.entries());
// Remove Advanced Search Query Parameters.
const param_match = "query\\[\\d+\\]\\[.+\\]".replace("query", query_parameter);
const param_regex = new RegExp(param_match, "g");
@ -97,13 +98,19 @@
//
// Logic server side / client side should match to generate the
// appropriate URL with javascript enabled or disable.
$form.submit(function (e) {
e.preventDefault();
e.stopPropagation();
const inputs = $form.serializeArray();
const href = url(inputs, settings.islandora_advanced_search_form);
window.history.pushState(null, document.title, href);
});
//
// If a route is set for the view display that this form is derived
// from, and we are not on the same page as that route, rely on the
// normal submit which will redirect to the appropriate page.
if (!settings.islandora_advanced_search_form.redirect) {
$form.submit(function (e) {
e.preventDefault();
e.stopPropagation();
const inputs = $form.serializeArray();
const href = url(inputs, settings.islandora_advanced_search_form);
window.history.pushState(null, document.title, href);
});
}
// Reset should trigger refresh of AJAX Blocks / Views.
$form.find('input[data-drupal-selector = "edit-reset"]').mousedown(function (e) {
const inputs = [];