|
|
|
//# 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);
|