Files
drupal11-ddev/web/core/misc/htmx/htmx-behaviors.js
2025-10-08 11:39:17 -04:00

42 lines
1.2 KiB
JavaScript

/**
* @file
* Connect Drupal.behaviors to htmx inserted content.
*/
(function (Drupal, htmx, drupalSettings) {
// Flag used to prevent running htmx initialization twice on elements we know
// have already been processed.
let attachFromHtmx = false;
// This is a custom event that triggers once the htmx request settled and
// all JS and CSS assets have been loaded successfully.
// @see https://htmx.org/api/#on
// @see htmx-assets.js
htmx.on('htmx:drupal:load', ({ detail }) => {
attachFromHtmx = true;
Drupal.attachBehaviors(detail.elt, drupalSettings);
attachFromHtmx = false;
});
// When htmx removes elements from the DOM, make sure they're detached first.
// This event is currently an alias of htmx:beforeSwap
htmx.on('htmx:drupal:unload', ({ detail }) => {
Drupal.detachBehaviors(detail.elt, drupalSettings, 'unload');
});
/**
* Initialize HTMX library on content added by Drupal Ajax Framework.
*
* @type {Drupal~behavior}
*
* @prop {Drupal~behaviorAttach} attach
* Initialize htmx behavior.
*/
Drupal.behaviors.htmx = {
attach(context) {
if (!attachFromHtmx && context !== document) {
htmx.process(context);
}
},
};
})(Drupal, htmx, drupalSettings);