1/** 2 * Facebook feed â caption See more / See less (ExpandableCaption). 3 * 4 * Shared across layouts via LayoutDefinition.assets.layout_js and injected 5 * into the customize preview via PreviewResponseBuilder `js_url`. Uses event 6 * delegation so Load More / preview HTML works without re-init. 7 * 8 * @package Easy_Social_Feed 9 * @subpackage Facebook/Frontend 10 * @since 6.7.8 11 */ 12( function () { 13 'use strict'; 14 15 // Preview asset re-injection must not stack duplicate document listeners. 16 if ( window.esfFacebookCaptionBound ) { 17 return; 18 } 19 window.esfFacebookCaptionBound = true; 20 21 /** 22 * Toggle caption preview / full markup. 23 * 24 * @param {HTMLElement} button Toggle control. 25 * @return {void} 26 */ 27 function toggleCaption( button ) { 28 var wrap = button.closest( '[data-esf-caption-expandable]' ); 29 if ( ! wrap ) { 30 return; 31 } 32 33 var preview = wrap.querySelector( '.esf-facebook-feed__caption-preview' ); 34 var full = wrap.querySelector( '.esf-facebook-feed__caption-full' ); 35 if ( ! preview || ! full ) { 36 return; 37 } 38 39 var expanded = button.getAttribute( 'aria-expanded' ) === 'true'; 40 var nextExpanded = ! expanded; 41 var moreLabel = button.getAttribute( 'data-label-more' ) || 'See more'; 42 var lessLabel = button.getAttribute( 'data-label-less' ) || 'See less'; 43 44 button.setAttribute( 'aria-expanded', nextExpanded ? 'true' : 'false' ); 45 button.textContent = nextExpanded ? lessLabel : moreLabel; 46 47 if ( nextExpanded ) { 48 wrap.classList.remove( 'is-collapsed' ); 49 wrap.classList.add( 'is-expanded' ); 50 preview.hidden = true; 51 preview.setAttribute( 'aria-hidden', 'true' ); 52 full.hidden = false; 53 full.setAttribute( 'aria-hidden', 'false' ); 54 } else { 55 wrap.classList.add( 'is-collapsed' ); 56 wrap.classList.remove( 'is-expanded' ); 57 preview.hidden = false; 58 preview.setAttribute( 'aria-hidden', 'false' ); 59 full.hidden = true; 60 full.setAttribute( 'aria-hidden', 'true' ); 61 } 62 } 63 64 document.addEventListener( 'click', function ( event ) { 65 var target = event.target; 66 if ( ! target || ! target.closest ) { 67 return; 68 } 69 var button = target.closest( '[data-esf-caption-toggle]' ); 70 if ( ! button || ! button.closest( '.esf-facebook-feed' ) ) { 71 return; 72 } 73 event.preventDefault(); 74 event.stopPropagation(); 75 toggleCaption( button ); 76 } ); 77}() );
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.