1/* 2 * APB.Placement 3 * Moves Paragraph elements based on Target Placement fields. 4 * Shared by apb.js (initial render) and APB.Editor (live update). 5 */ 6 7window.APB = window.APB || {}; 8 9APB.Placement = { 10 /** 11 * Moves a single Paragraph based on its Target Placement settings. 12 * @param {HTMLElement} element - The Paragraph DOM element to reposition. 13 */ 14 update: function (element) { 15 const DOM = APB.DOM; 16 17 // Get Target Placement values 18 const region = DOM.text( 19 DOM.one( 20 ':scope > .field--name-field-apb-target-placement .term-machine-name', 21 element 22 ) 23 ).trim(); 24 25 const locator = DOM.text( 26 DOM.one( 27 ':scope > .field--name-field-apb-target-placement .apb-tx-container-locator', 28 element 29 ) 30 ).trim(); 31 32 const method = DOM.text( 33 DOM.one( 34 ':scope > .field--name-field-apb-target-placement .apb-tx-insert-method', 35 element 36 ) 37 ).trim(); 38 39 if (!region || !locator) { 40 console.warn('APB.Placement: Missing region or locator.'); 41 return; 42 } 43 44 if (region === 'current_position') { 45 // Do nothing if region is set to stay in place 46 return; 47 } 48 49 const target = DOM.one(locator); 50 if (!target) { 51 console.warn(`APB.Placement: Locator "${locator}" not found in DOM.`); 52 return; 53 } 54 55 // Optional: Special region behavior 56 if (region === 'top_region') { 57 const pageTitle = DOM.one('#page-title'); 58 if (pageTitle) DOM.addClass(pageTitle, 'no-display'); 59 } 60 61 if (region === 'main_content_no_container') { 62 const sectionTitle = DOM.one('.apb-section-title', element); 63 if (sectionTitle) { 64 sectionTitle.innerHTML = `<div class="section-title-inner">${sectionTitle.innerHTML}</div>`; 65 } 66 } 67 68 // Move the element based on insert method 69 switch (method) { 70 case 'insertBefore': 71 target.parentNode.insertBefore(element, target); 72 break; 73 case 'insertAfter': 74 target.parentNode.insertBefore(element, target.nextSibling); 75 break; 76 case 'appendTo': 77 target.appendChild(element); 78 break; 79 default: // 'prependTo' or fallback 80 target.insertBefore(element, target.firstChild); 81 break; 82 } 83 84 // console.info("APB.Placement updated:", { region, locator, method }); 85 }, 86};
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.