42 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			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);
							 |