diff --git a/.hlxignore b/.hlxignore index c49bdd6be9..5c078165b5 100644 --- a/.hlxignore +++ b/.hlxignore @@ -1,5 +1,9 @@ +*.json +!*/**/*.json .* *.md -LICENSE test/* build/* +LICENSE +web-test-runner.config.mjs +codecov.yaml diff --git a/akamai/sureroute-test-object.html b/akamai/sureroute-test-object.html deleted file mode 100644 index 73bf29c305..0000000000 --- a/akamai/sureroute-test-object.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit - - - - - - -

Lorem Ipsum

- -

Ipsum, Lorem

- -
-

-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam massa enim, tincidunt non hendrerit eget, malesuada et nisi. In hac habitasse platea dictumst. Praesent nec laoreet ante. Aenean tempus nisi in erat tempus tempus. Vestibulum imperdiet lobortis sapien eu tempus. Vivamus volutpat quam sed eros molestie vitae dignissim nulla ultricies. Vivamus dictum elit velit. Pellentesque pellentesque ornare ornare. Mauris vel gravida sapien. Praesent eleifend tristique ipsum nec tempor. Vestibulum cursus eleifend tellus, a egestas lectus euismod sed. -

-

-Duis nec massa quam. Nulla porta, enim ut consequat tincidunt, quam tortor consequat enim, eu interdum eros lorem eu turpis. Cras vestibulum orci quis felis tristique quis semper sem imperdiet. Sed mattis tincidunt risus scelerisque scelerisque. Aliquam nisl quam, bibendum quis luctus eu, sodales ut felis. Integer id turpis nisi. Phasellus mattis nulla eu odio faucibus a auctor orci tristique. Nulla ullamcorper, risus nec semper accumsan, libero lacus aliquet elit, quis lacinia metus nunc vestibulum turpis. Suspendisse vel sapien vel magna auctor aliquam. Aenean fringilla fringilla metus non imperdiet. Aliquam nisl lacus, tempus vitae commodo non, accumsan ut lectus. Nam in urna eu neque pretium aliquam. Maecenas sit amet urna lectus. Donec vitae metus enim. -

-

-Sed lacus nulla, faucibus eget ullamcorper ut, mollis at metus. Vivamus tortor felis, tincidunt at tristique ut, tincidunt feugiat velit. Ut euismod felis non urna luctus luctus. Integer nec urna massa. Mauris vestibulum hendrerit auctor. Morbi at tellus nec arcu scelerisque rhoncus. Phasellus facilisis interdum lorem vulputate posuere. Nullam quis felis est. Aenean metus augue, tempus non ultricies et, dapibus vel felis. Pellentesque at augue velit. Nulla erat nisi, posuere eu pellentesque id, pretium ac libero. Phasellus tincidunt sollicitudin sapien at mollis. Nullam et libero velit, nec tincidunt eros. Aliquam et sem elit. Quisque suscipit orci enim, vel aliquam nisi. Suspendisse in enim a ligula blandit volutpat in id velit. -

-

-Nam tempor neque nec ligula sollicitudin rhoncus. Etiam et lorem vel odio pharetra interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In imperdiet nisi sed diam rutrum gravida in vel massa. Nam ullamcorper ultrices diam, vitae consequat lacus consequat consequat. Curabitur laoreet leo sed tortor fringilla nec euismod libero lobortis. Donec non enim lectus. Suspendisse potenti. In hac habitasse platea dictumst. Fusce semper auctor neque nec lobortis. Praesent vitae mauris turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin sed pharetra odio. Suspendisse potenti. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis eget odio purus, quis dapibus massa. -

-

-Curabitur ut dapibus eros. Donec tempor, felis ac facilisis bibendum, nisi purus pellentesque sem, sollicitudin tempor lectus nulla at mi. Maecenas quis urna ut ante pulvinar pellentesque. Duis auctor imperdiet suscipit. Pellentesque dui nulla, volutpat quis posuere a, gravida ornare augue. Proin nec felis pharetra magna pellentesque facilisis. Curabitur lacus libero, malesuada sed tincidunt ac, aliquet ut tortor. Etiam gravida lorem nulla, consectetur eleifend risus. Donec facilisis, turpis laoreet imperdiet laoreet, purus justo egestas nulla, et hendrerit leo eros at orci. Nunc vulputate mauris sit amet sapien accumsan nec euismod orci volutpat. Sed ultricies velit ut lorem venenatis in convallis tellus imperdiet. Aenean auctor ultrices est ultricies rhoncus. Phasellus non magna a leo luctus fermentum nec fermentum erat. -

-

- -Sed faucibus nisl quis diam mollis quis varius tortor tincidunt. Phasellus in turpis in tellus consectetur mollis. Donec a neque id metus condimentum dignissim. In hac habitasse platea dictumst. Pellentesque sem nisi, pulvinar nec sagittis vitae, lacinia non tellus. Aliquam dignissim dignissim volutpat. Pellentesque ut quam et mi tincidunt varius id vel quam. Duis consectetur elit ac ligula fringilla elementum. In elementum tellus viverra mi vehicula vitae tempus lectus laoreet. Nullam diam nibh, tincidunt vitae imperdiet a, luctus a felis. In posuere pulvinar volutpat. Pellentesque eget viverra justo. -

-

-Nullam nec sapien at felis molestie auctor. Sed dignissim erat eu nulla ullamcorper mattis. Curabitur felis sem, feugiat non semper ut, sollicitudin sed ipsum. Quisque cursus laoreet turpis, sit amet molestie neque consequat at. Vestibulum eu ligula quis nisl pulvinar rhoncus. Praesent faucibus, dolor in elementum ullamcorper, tellus ante mattis risus, ac imperdiet eros eros quis risus. Praesent luctus libero a diam pharetra eget placerat risus pulvinar. Donec sollicitudin pulvinar velit vel pellentesque. Quisque sagittis leo ac mauris congue adipiscing. In tempus facilisis facilisis. Aliquam erat volutpat. Suspendisse sagittis libero ipsum. -

-

-Aliquam at cursus ipsum. Vivamus purus mi, pretium at molestie id, dictum in quam. Proin egestas auctor iaculis. Maecenas sodales facilisis tellus eu bibendum. Vestibulum varius vehicula scelerisque. Praesent condimentum varius commodo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec sem nisl, sagittis eu euismod non, tempor nec magna. Fusce sed auctor nisl. Phasellus porttitor sagittis est, sit amet eleifend elit dignissim et. Nam consectetur elementum elit non egestas. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum a ultricies neque. Integer hendrerit nisi id dolor porta quis venenatis lacus dignissim. In vitae fringilla magna. -

-

-Fusce ultrices scelerisque felis, id semper quam posuere a. Sed nec erat eget velit euismod condimentum a in enim. Maecenas bibendum aliquam tincidunt. Mauris vestibulum neque at nulla sagittis id lacinia enim fermentum. Quisque adipiscing risus nec massa auctor condimentum. Mauris venenatis lacus justo, eu varius odio. Fusce commodo luctus felis, vitae lobortis lectus facilisis id. Nunc faucibus vestibulum urna et lacinia. Cras ornare quam neque, non gravida sapien. Cras porta, diam sit amet laoreet rutrum, massa erat commodo diam, eu rhoncus nisl massa ac metus. In sem mauris, venenatis nec euismod ac, suscipit condimentum neque. Quisque pretium blandit lectus, ut aliquet neque rhoncus eu. Vivamus ultrices porttitor tincidunt. Curabitur ut ipsum non ipsum ultrices tincidunt. Integer scelerisque augue nec nisl varius tristique. Morbi condimentum rutrum sodales. Pellentesque odio mauris, porttitor ac sollicitudin in, ultrices ut diam. -

-

-Sed congue adipiscing orci a pellentesque. Etiam quis neque eu nulla viverra egestas. Ut ultricies dui non enim rhoncus laoreet. Nulla molestie nibh non erat venenatis gravida. Pellentesque faucibus sem sit amet risus tincidunt non ultrices diam auctor. Praesent quis libero et tellus tempor molestie. Mauris ullamcorper feugiat libero sed elementum. Donec eget nunc eget diam hendrerit pulvinar. Ut ut imperdiet enim. Vestibulum sed quam lorem. Nunc ipsum massa, venenatis eget condimentum at, ornare id ante. Vestibulum ornare volutpat tincidunt. Etiam a eros erat. Curabitur lobortis, nisi a malesuada tincidunt, nisi enim congue eros, in dictum elit odio at nunc. Nam hendrerit porta velit a viverra. -

-

-Etiam vel velit urna. Donec commodo aliquet magna rhoncus pretium. Donec fermentum orci in diam dictum non pulvinar mi tristique. Morbi urna libero, sagittis vel facilisis nec, ornare vitae nunc. Pellentesque laoreet mi a mi condimentum sagittis. Donec eleifend, nisi sit amet tincidunt sollicitudin, leo magna accumsan elit, at adipiscing velit lacus id purus. Aenean nunc sapien, egestas vitae pretium viverra, bibendum vel tellus. Maecenas mattis dui ac justo facilisis sollicitudin. Proin in mi ac lacus hendrerit congue ac vitae elit. Aliquam erat volutpat. In hac habitasse platea dictumst. Phasellus dapibus diam vel velit consectetur tempor. Maecenas viverra suscipit bibendum. Sed non enim neque. -

- -

-Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Phasellus at odio et odio volutpat egestas. Fusce non pellentesque felis. Nunc fermentum posuere sem quis egestas. Integer nec orci vel eros fringilla bibendum. Praesent placerat molestie elit at mattis. Nunc rutrum faucibus arcu non bibendum. Vestibulum at sapien sit amet sem iaculis congue. Morbi tempus, libero vitae interdum suscipit, lacus ipsum suscipit quam, non pretium nulla orci eget dui. Praesent et nisl turpis, ultricies convallis quam. In tempor urna et eros aliquet accumsan. Phasellus lobortis bibendum libero sit amet viverra. Aenean consectetur, neque eu cursus posuere, est leo molestie dui, sit amet vulputate mi erat eu tortor. Suspendisse arcu velit, porta sit amet adipiscing sed, ultrices id urna. In hendrerit iaculis massa in pretium. Vivamus eros augue, venenatis non hendrerit a, bibendum in tortor. Fusce et mauris lorem, vitae semper ligula. Nam iaculis, eros eu varius varius, orci sapien rhoncus arcu, et luctus urna lectus non quam. Donec gravida convallis justo at bibendum. Quisque non est velit, sed laoreet augue. -

-
- - - diff --git a/libs/blocks/article-header/article-header.js b/libs/blocks/article-header/article-header.js index e832f1729d..86052fb74e 100644 --- a/libs/blocks/article-header/article-header.js +++ b/libs/blocks/article-header/article-header.js @@ -145,8 +145,10 @@ export default async function init(blockEl) { const categoryContainer = childrenEls[0]; const categoryEl = categoryContainer.firstElementChild.firstElementChild; - const categoryTag = getLinkForTopic(categoryEl.textContent); - categoryEl.innerHTML = categoryTag; + if (categoryEl?.textContent) { + const categoryTag = getLinkForTopic(categoryEl.textContent); + categoryEl.innerHTML = categoryTag; + } categoryContainer.classList.add('article-category'); const titleContainer = childrenEls[1]; diff --git a/libs/martech/attributes.js b/libs/martech/attributes.js index 4522cf8e64..5b1dc75b63 100644 --- a/libs/martech/attributes.js +++ b/libs/martech/attributes.js @@ -20,13 +20,22 @@ export function decorateDefaultLinkAnalytics(block, config) { let header = ''; let linkCount = 1; - let headerSelector = 'h1, h2, h3, h4, h5, h6, .tracking-header'; - const headers = block.querySelectorAll(headerSelector); - if (!headers.length) headerSelector = `${headerSelector}, b, strong`; - block.querySelectorAll(`${headerSelector}, a:not(.video.link-block), button`).forEach((item) => { + const headerSelector = 'h1, h2, h3, h4, h5, h6'; + let analyticsSelector = `${headerSelector}, .tracking-header`; + const headers = block.querySelectorAll(analyticsSelector); + if (!headers.length) analyticsSelector = `${analyticsSelector}, b, strong`; + block.querySelectorAll(`${analyticsSelector}, a:not(.video.link-block), button`).forEach((item) => { if (item.nodeName === 'A' || item.nodeName === 'BUTTON') { if (item.classList.contains('tracking-header')) { header = processTrackingLabels(item.textContent, config, 20); + } else if (!header) { + const section = block.closest('.section'); + if (section?.className.includes('-up') || section?.classList.contains('milo-card-section')) { + const previousHeader = section?.previousElementSibling?.querySelector(headerSelector); + if (previousHeader) { + header = processTrackingLabels(previousHeader.textContent, config, 20); + } + } } if (item.hasAttribute('daa-ll')) { const labelArray = item.getAttribute('daa-ll').split('-').map((part) => { diff --git a/libs/utils/utils.js b/libs/utils/utils.js index d9c2ab35ea..79411ae6d6 100644 --- a/libs/utils/utils.js +++ b/libs/utils/utils.js @@ -670,8 +670,7 @@ function decorateHeader() { header.remove(); return; } - const headerQuery = new URLSearchParams(window.location.search).get('headerqa'); - header.className = headerQuery || headerMeta || 'gnav'; + header.className = headerMeta || 'gnav'; const metadataConfig = getMetadata('breadcrumbs')?.toLowerCase() || getConfig().breadcrumbs; if (metadataConfig === 'off') return; @@ -711,8 +710,7 @@ async function loadFooter() { footer.remove(); return; } - const footerQuery = new URLSearchParams(window.location.search).get('footerqa'); - footer.className = footerQuery || footerMeta || 'footer'; + footer.className = footerMeta || 'footer'; await loadBlock(footer); } @@ -795,7 +793,10 @@ export async function loadIms() { }, onError: reject, }; - loadScript(`${base}/deps/imslib.min.js`); + const path = PAGE_URL.searchParams.get('useAlternateImsDomain') + ? 'https://auth.services.adobe.com/imslib/imslib.min.js' + : `${base}/deps/imslib.min.js`; + loadScript(path); }).then(() => { if (!window.adobeIMS?.isSignedInUser()) { getConfig().entitlements([]); @@ -826,8 +827,7 @@ export async function loadMartech({ persEnabled = false, persManifests = [] } = } async function checkForPageMods() { - const search = new URLSearchParams(window.location.search); - const offFlag = (val) => search.get(val) === 'off'; + const offFlag = (val) => PAGE_URL.searchParams.get(val) === 'off'; if (offFlag('mep')) return; const persMd = getMetadata('personalization'); const promoMd = getMetadata('manifestnames'); diff --git a/test/blocks/article-header/article-header.test.js b/test/blocks/article-header/article-header.test.js index 8530ae65ec..df302d267f 100644 --- a/test/blocks/article-header/article-header.test.js +++ b/test/blocks/article-header/article-header.test.js @@ -107,3 +107,11 @@ describe('test the invalid article header', () => { expect(date.classList.contains('article-date-invalid')).to.be.false; }); }); + +describe('article header', () => { + it('allows a blank category', async () => { + document.body.innerHTML = await readFile({ path: './mocks/body-without-category.html' }); + await init(document.body.querySelector('.article-header')); + expect(document.body.querySelector('.article-category a')).to.be.null; + }); +}); diff --git a/test/blocks/article-header/mocks/body-without-category.html b/test/blocks/article-header/mocks/body-without-category.html new file mode 100644 index 0000000000..79613c93c7 --- /dev/null +++ b/test/blocks/article-header/mocks/body-without-category.html @@ -0,0 +1,30 @@ +
+
+
+
+
+
+
+
+
+

+ Celebrating a special milestone: 10 things you might not know about Adobe’s 40 years of innovation

+
+
+
+
+

Adobe Communications Team

+

12-05-2022

+
+
+
+
+

+ + +

+
+
+
+
+
diff --git a/test/martech/attributes.test.js b/test/martech/attributes.test.js index 5e31bdabbb..0e6e89e748 100644 --- a/test/martech/attributes.test.js +++ b/test/martech/attributes.test.js @@ -25,6 +25,9 @@ describe('Analytics', async () => { section.querySelectorAll('a').forEach((link, idx) => { expect(link.getAttribute('daa-ll')).to.equal(expectedLinkValues[idx]); }); + + const cardLink = document.querySelector('.milo-card-section a'); + expect(cardLink.getAttribute('daa-ll')).to.equal('Learn more AI for gr-1--Header for tiles bel'); }); it('should decorate pzn with attributes', async () => { document.body.outerHTML = await readFile({ path: './mocks/body.html' }); diff --git a/test/martech/mocks/body.html b/test/martech/mocks/body.html index e27638f8df..ee224e65be 100644 --- a/test/martech/mocks/body.html +++ b/test/martech/mocks/body.html @@ -20,6 +20,42 @@

Second Traditional Header

+
+
+
+
+

Header for tiles below

+
+
+
+
+
+
+ +
+
+
+
style
+
Four up, M spacing
+
+
+