2022-07-07 14:41:31 +02:00

61 lines
2.1 KiB
JavaScript

/**
* @file
* Provides base widget behaviours.
*/
(function ($, Drupal) {
'use strict';
/**
* Handles "facets_filter" event and triggers "facets_filtering".
*
* The facets module will listend and trigger defined events on elements with
* class: "js-facets-widget".
*
* Events are doing following:
* "facets_filter" - widget should trigger this event. The facets module will
* handle it accordingly in case of AJAX and Non-AJAX views.
* "facets_filtering" - The facets module will trigger this event before
* filter is executed.
*
* This is an example how to trigger "facets_filter" event for your widget:
* $('.my-custom-widget.js-facets-widget')
* .once('my-custom-widget-on-change')
* .on('change', function () {
* // In this example $(this).val() will provide needed URL.
* $(this).trigger('facets_filter', [ $(this).val() ]);
* });
*
* The facets module will trigger "facets_filtering" before filter is
* executed. Widgets can listen on "facets_filtering" event and react before
* filter is executed. Most common use case is to disable widget. When you
* disable widget, a user will not be able to trigger new "facets_filter"
* event before initial filter request is finished.
*
* This is an example how to handle "facets_filtering":
* $('.my-custom-widget.js-facets-widget')
* .once('my-custom-widget-on-facets-filtering')
* .on('facets_filtering.my_widget_module', function () {
* // Let's say, that widget can be simply disabled (fe. select).
* $(this).prop('disabled', true);
* });
*
* You should namespace events for your module widgets. With namespaced events
* you have better control on your handlers and if it's needed, you can easier
* register/deregister them.
*/
Drupal.behaviors.facetsFilter = {
attach: function (context) {
$('.js-facets-widget', context)
.once('js-facet-filter')
.on('facets_filter.facets', function (event, url) {
$('.js-facets-widget').trigger('facets_filtering');
window.location = url;
});
}
};
})(jQuery, Drupal);