/** * @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);