diff --git a/bulk-update/bulk-update.js b/bulk-update/bulk-update.js index 18d774d..911a54b 100644 --- a/bulk-update/bulk-update.js +++ b/bulk-update/bulk-update.js @@ -2,14 +2,25 @@ import fs from 'fs'; import { fetch } from '@adobe/fetch'; import { loadDocument } from './document-manager/document-manager.js'; +const delay = (milliseconds) => new Promise((resolve) => { setTimeout(resolve, milliseconds); }); + +function getJsonData(json, sheetName) { + if (json[':type'] === 'multi-sheet') { + return json[sheetName]; + } + return json; +} + /** * Loads a list of entries from a Query Index. * * @param {*} url - The URL to fetch the data from. * @returns {Promise} - List of entries. */ -export async function loadQueryIndex(url, fetchFunction = fetch) { +export async function loadQueryIndex(url, fetchFunction = fetch, fetchWaitMs = 500) { + console.log(`Loading Query Index from ${url}`); const entries = []; + await delay(fetchWaitMs); const response = await fetchFunction(url); if (!response.ok) { @@ -17,13 +28,16 @@ export async function loadQueryIndex(url, fetchFunction = fetch) { } const json = await response.json(); - const { total, offset, limit, data } = json; + const { total, offset, limit, data } = getJsonData(json, 'sitemap'); - entries.push(...data.map((entry) => entry.path)); + if (!Array.isArray(data)) throw new Error(`Invalid data format: ${url}`); + entries.push(...data.map((entry) => entry.path || entry.entry || entry.url)); const remaining = total - offset - limit; if (remaining > 0) { - const nextUrl = `${url}?limit=${limit}&offset=${offset + limit}`; - entries.push(...await loadQueryIndex(nextUrl, fetchFunction)); + const nextUrl = new URL(url); + nextUrl.searchParams.set('limit', limit); + nextUrl.searchParams.set('offset', offset + limit); + entries.push(...await loadQueryIndex(nextUrl.toString(), fetchFunction)); } return entries; @@ -39,10 +53,17 @@ export async function loadQueryIndex(url, fetchFunction = fetch) { * @throws {Error} - If the list format or entry is unsupported. */ export async function loadListData(source, fetchFunction = fetch) { + if (!source) return []; if (Array.isArray(source) || source.includes(',')) { const entries = Array.isArray(source) ? source : source.split(','); - return (await Promise.all(entries.map((entry) => loadListData(entry.trim())))).flat(); + const loadedEntries = []; + for (const entry of entries) { + const loadedData = await loadListData(entry.trim(), fetchFunction); + if (loadedData) loadedEntries.push(...loadedData); + } + return loadedEntries; } + const extension = source.includes('.') ? source.split('.').pop() : null; if (!extension) { @@ -54,9 +75,9 @@ export async function loadListData(source, fetchFunction = fetch) { if (source.startsWith('http')) { return loadQueryIndex(source, fetchFunction); } - return JSON.parse(fs.readFileSync(source, 'utf8').trim()); + return loadListData(JSON.parse(fs.readFileSync(source, 'utf8').trim()), fetchFunction); case 'txt': - return fs.readFileSync(source, 'utf8').trim().split('\n'); + return loadListData(fs.readFileSync(source, 'utf8').trim().split('\n'), fetchFunction); default: throw new Error(`Unsupported list format or entry: ${source}`); } @@ -72,18 +93,17 @@ export async function loadListData(source, fetchFunction = fetch) { * @returns {object} - The totals generated by the reporter. */ export default async function main(config, migrate, reporter = null) { - config.reporter ??= reporter; + config.reporter = reporter || config.reporter; try { - const entryList = await loadListData(config.list); - - for (const [i, entry] of entryList.entries()) { - console.log(`Processing entry ${i + 1} of ${entryList.length} ${entry}`); + for (const [i, entry] of config.list.entries()) { + console.log(`Processing entry ${i + 1} of ${config.list.length} ${entry}`); const document = await loadDocument(entry, config); await migrate(document); } } catch (e) { console.error('Bulk Update Error:', e); + config.reporter.log('Bulk Update Error', 'error', e.message, e.stack); } return config.reporter.generateTotals(); @@ -101,8 +121,7 @@ if (import.meta.url === `file://${process.argv[1]}`) { const migrationFile = `${process.cwd()}/${migrationFolder}/migration.js`; // eslint-disable-next-line import/no-dynamic-require, global-require const migration = await import(migrationFile); - const config = migration.init(); - config.list = list || config.list; + const config = await migration.init(list); await main(config, migration.migrate); process.exit(0); diff --git a/bulk-update/document-manager/document-manager.js b/bulk-update/document-manager/document-manager.js index 4c75be0..a9293a0 100644 --- a/bulk-update/document-manager/document-manager.js +++ b/bulk-update/document-manager/document-manager.js @@ -29,12 +29,12 @@ export function entryToPath(entry) { * * @param {string} url - The URL to fetch the markdown file from. * @param {function} reporter - A logging function. - * @param {number} waitMs - The number of milliseconds to wait before fetching the markdown. + * @param {number} fetchWaitMs - The number of milliseconds to wait before fetching the markdown. * @returns {Promise} A promise that resolves to the fetched markdown. */ -async function getMarkdown(url, reporter, waitMs = 500, fetchFunction = fetch) { +async function getMarkdown(url, reporter, fetchWaitMs = 500, fetchFunction = fetch) { try { - await delay(waitMs); // Wait 500ms to avoid rate limiting, not needed for live. + await delay(fetchWaitMs); // Wait 500ms to avoid rate limiting, not needed for live. const response = await fetchFunction(url); if (!response.ok) { @@ -65,7 +65,7 @@ function getMdast(mdTxt, reporter) { } /** - * Load markdown from a file or URL. + * Load entry markdown from a file or URL. * * If a save directory is provided in the config and a file exists at that path, * this function will return the contents of that file if it was modified @@ -73,17 +73,20 @@ function getMdast(mdTxt, reporter) { * specified path or URL, save it to the save directory if one is provided, and * return the fetched markdown. * - * @param {string} entry - The path or URL to fetch the markdown from. + * @param {string} entry - The entry path of the document. * @param {Object} config - The configuration options. * @param {string} config.mdDir - The directory to save the fetched markdown to. * @param {string} config.siteUrl - The base URL for relative markdown paths. * @param {function} config.reporter - A logging function. * @param {number} config.mdCacheMs - The cache time in milliseconds. If -1, the cache never expires. + * @param {Function} [fetchFunction=fetch] - The fetch function to use for fetching markdown. * @returns {Promise} An object containing the markdown content, the markdown abstract syntax tree (mdast), the entry, the markdown path, and the markdown URL. + * @throws {Error} - If config is missing or entry is invalid. */ export async function loadDocument(entry, config, fetchFunction = fetch) { if (!config) throw new Error('Missing config'); - const { mdDir, siteUrl, reporter, waitMs, mdCacheMs = 0 } = config; + if (!entry || !entry.startsWith('/')) throw new Error(`Invalid path: ${entry}`); + const { mdDir, siteUrl, reporter, fetchWaitMs, mdCacheMs = 0 } = config; const document = { entry, path: entryToPath(entry) }; document.url = new URL(document.path, siteUrl).href; document.markdownFile = `${mdDir}${document.path}.md`; @@ -100,7 +103,7 @@ export async function loadDocument(entry, config, fetchFunction = fetch) { } if (!document.markdown) { - document.markdown = await getMarkdown(`${document.url}.md`, reporter, waitMs, fetchFunction); + document.markdown = await getMarkdown(`${document.url}.md`, reporter, fetchWaitMs, fetchFunction); reporter.log('load', 'success', 'Fetched markdown', `${document.url}.md`); if (document.markdown && mdDir) { diff --git a/bulk-update/index.js b/bulk-update/index.js new file mode 100644 index 0000000..074f4e6 --- /dev/null +++ b/bulk-update/index.js @@ -0,0 +1,12 @@ +import { saveDocument } from './document-manager/document-manager.js'; +import ConsoleReporter from './reporter/console-reporter.js'; +import ExcelReporter from './reporter/excel-reporter.js'; +import BulkUpdate, { loadListData } from './bulk-update.js'; + +export { + BulkUpdate, + saveDocument, + ConsoleReporter, + ExcelReporter, + loadListData, +}; diff --git a/bulk-update/reporter/excel-reporter.js b/bulk-update/reporter/excel-reporter.js index 345c451..58c8d5b 100644 --- a/bulk-update/reporter/excel-reporter.js +++ b/bulk-update/reporter/excel-reporter.js @@ -3,17 +3,42 @@ import * as fs from 'fs'; import BaseReporter from './reporter.js'; /** - * ExcelReporter class extending BaseReporter and logging to an XLSX file. + * ExcelReporter class extending BaseReporter and logging to an Excel report file. + * + * @extends BaseReporter */ class ExcelReporter extends BaseReporter { - constructor(filepath) { + /** + * Creates a new instance of the ExcelReporter class. + * + * @param {string} filepath - The file path where the Excel file will be saved. + * @param {boolean} [autoSave=true] - Excel file should be automatically saved when logging. + */ + constructor(filepath, autoSave = true) { super(); this.filepath = filepath; + this.autoSave = autoSave; this.workbook = xlsx.utils.book_new(); const totalsSheet = xlsx.utils.aoa_to_sheet([['Topic', 'Status', 'Count']]); xlsx.utils.book_append_sheet(this.workbook, totalsSheet, 'Totals'); + } - this.saveReport(); + /** + * Get date string in the format of YYYY-MM-DD_HH-MM for file naming. + * + * @returns {string} - date string + */ + static getDateString(date = new Date()) { + return date.toLocaleString('en-US', { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + }) + .replace(/\/|,|:| /g, '-') + .replace('--', '_'); } /** @@ -25,16 +50,29 @@ class ExcelReporter extends BaseReporter { * @param {...any} args - Additional arguments to be included in the log. */ log(topic, status, message, ...args) { + const header = ['Status', 'Message']; + const log = [status, message]; + args.forEach((arg) => { + if (typeof arg === 'object' && !Array.isArray(arg)) { + Object.entries(arg).forEach(([key, value]) => { + header.push(key); + log.push(value); + }); + } else if (Array.isArray(arg)) { + log.push(...arg); + } else { + log.push(arg); + } + }); super.log(topic, status, message, ...args); const sheetName = topic || 'Uncategorized'; let sheet = this.workbook.Sheets[sheetName]; if (!sheet) { - sheet = xlsx.utils.aoa_to_sheet([['Status', 'Message']]); + sheet = xlsx.utils.aoa_to_sheet([header]); xlsx.utils.book_append_sheet(this.workbook, sheet, sheetName); } - const log = [status, message, ...args]; const range = xlsx.utils.decode_range(sheet['!ref']); const newRow = range.e.r + 1; @@ -45,7 +83,7 @@ class ExcelReporter extends BaseReporter { sheet['!ref'] = xlsx.utils.encode_range({ s: range.s, e: { r: newRow, c: log.length - 1 } }); - this.saveReport(); + if (this.autoSave) this.saveReport(); } /** @@ -62,6 +100,7 @@ class ExcelReporter extends BaseReporter { }); }); xlsx.utils.sheet_add_aoa(totalsSheet, data, { origin: 'A2' }); + if (!this.filepath) return totals; try { this.saveReport(); console.log(`Report saved to ${this.filepath}`); @@ -73,15 +112,14 @@ class ExcelReporter extends BaseReporter { } /** - * Saves the generated report to the specified filepath. - */ + * Saves the generated report to the specified filepath. + */ saveReport() { - if (this.filepath) { - const directoryPath = this.filepath.split('/').slice(0, -1).join('/'); - fs.mkdirSync(directoryPath, { recursive: true }); - xlsx.set_fs(fs); - xlsx.writeFile(this.workbook, this.filepath); - } + if (!this.filepath) return; + const directoryPath = this.filepath.split('/').slice(0, -1).join('/'); + fs.mkdirSync(directoryPath, { recursive: true }); + xlsx.set_fs(fs); + xlsx.writeFile(this.workbook, this.filepath); } } diff --git a/faas-variations-report/query-indexes.json b/faas-variations-report/query-indexes.json new file mode 100644 index 0000000..51856ec --- /dev/null +++ b/faas-variations-report/query-indexes.json @@ -0,0 +1,80 @@ +[ + "https://main--bacom--adobecom.hlx.live/query-index.json", + "https://main--bacom--adobecom.hlx.live/ae_ar/query-index.json", + "https://main--bacom--adobecom.hlx.live/ae_en/query-index.json", + "https://main--bacom--adobecom.hlx.live/africa/query-index.json", + "https://main--bacom--adobecom.hlx.live/ar/query-index.json", + "https://main--bacom--adobecom.hlx.live/at/query-index.json", + "https://main--bacom--adobecom.hlx.live/au/query-index.json", + "https://main--bacom--adobecom.hlx.live/be_en/query-index.json", + "https://main--bacom--adobecom.hlx.live/be_fr/query-index.json", + "https://main--bacom--adobecom.hlx.live/be_nl/query-index.json", + "https://main--bacom--adobecom.hlx.live/bg/query-index.json", + "https://main--bacom--adobecom.hlx.live/br/query-index.json", + "https://main--bacom--adobecom.hlx.live/ca/query-index.json", + "https://main--bacom--adobecom.hlx.live/ca_fr/query-index.json", + "https://main--bacom--adobecom.hlx.live/ch_de/query-index.json", + "https://main--bacom--adobecom.hlx.live/ch_fr/query-index.json", + "https://main--bacom--adobecom.hlx.live/ch_it/query-index.json", + "https://main--bacom--adobecom.hlx.live/cl/query-index.json", + "https://main--bacom--adobecom.hlx.live/cn/query-index.json", + "https://main--bacom--adobecom.hlx.live/co/query-index.json", + "https://main--bacom--adobecom.hlx.live/cy_en/query-index.json", + "https://main--bacom--adobecom.hlx.live/cz/query-index.json", + "https://main--bacom--adobecom.hlx.live/de/query-index.json", + "https://main--bacom--adobecom.hlx.live/dk/query-index.json", + "https://main--bacom--adobecom.hlx.live/ee/query-index.json", + "https://main--bacom--adobecom.hlx.live/es/query-index.json", + "https://main--bacom--adobecom.hlx.live/fi/query-index.json", + "https://main--bacom--adobecom.hlx.live/fr/query-index.json", + "https://main--bacom--adobecom.hlx.live/gr_en/query-index.json", + "https://main--bacom--adobecom.hlx.live/hk_en/query-index.json", + "https://main--bacom--adobecom.hlx.live/hk_zh/query-index.json", + "https://main--bacom--adobecom.hlx.live/hu/query-index.json", + "https://main--bacom--adobecom.hlx.live/id_en/query-index.json", + "https://main--bacom--adobecom.hlx.live/id_id/query-index.json", + "https://main--bacom--adobecom.hlx.live/ie/query-index.json", + "https://main--bacom--adobecom.hlx.live/il_en/query-index.json", + "https://main--bacom--adobecom.hlx.live/il_he/query-index.json", + "https://main--bacom--adobecom.hlx.live/in/query-index.json", + "https://main--bacom--adobecom.hlx.live/in_hi/query-index.json", + "https://main--bacom--adobecom.hlx.live/it/query-index.json", + "https://main--bacom--adobecom.hlx.live/jp/query-index.json", + "https://main--bacom--adobecom.hlx.live/kr/query-index.json", + "https://main--bacom--adobecom.hlx.live/la/query-index.json", + "https://main--bacom--adobecom.hlx.live/lt/query-index.json", + "https://main--bacom--adobecom.hlx.live/lu_de/query-index.json", + "https://main--bacom--adobecom.hlx.live/lu_en/query-index.json", + "https://main--bacom--adobecom.hlx.live/lu_fr/query-index.json", + "https://main--bacom--adobecom.hlx.live/lv/query-index.json", + "https://main--bacom--adobecom.hlx.live/mena_ar/query-index.json", + "https://main--bacom--adobecom.hlx.live/mena_en/query-index.json", + "https://main--bacom--adobecom.hlx.live/mt/query-index.json", + "https://main--bacom--adobecom.hlx.live/mx/query-index.json", + "https://main--bacom--adobecom.hlx.live/my_en/query-index.json", + "https://main--bacom--adobecom.hlx.live/my_ms/query-index.json", + "https://main--bacom--adobecom.hlx.live/nl/query-index.json", + "https://main--bacom--adobecom.hlx.live/no/query-index.json", + "https://main--bacom--adobecom.hlx.live/nz/query-index.json", + "https://main--bacom--adobecom.hlx.live/pe/query-index.json", + "https://main--bacom--adobecom.hlx.live/ph_en/query-index.json", + "https://main--bacom--adobecom.hlx.live/ph_fil/query-index.json", + "https://main--bacom--adobecom.hlx.live/pl/query-index.json", + "https://main--bacom--adobecom.hlx.live/pt/query-index.json", + "https://main--bacom--adobecom.hlx.live/ro/query-index.json", + "https://main--bacom--adobecom.hlx.live/ru/query-index.json", + "https://main--bacom--adobecom.hlx.live/sa_ar/query-index.json", + "https://main--bacom--adobecom.hlx.live/sa_en/query-index.json", + "https://main--bacom--adobecom.hlx.live/se/query-index.json", + "https://main--bacom--adobecom.hlx.live/sg/query-index.json", + "https://main--bacom--adobecom.hlx.live/si/query-index.json", + "https://main--bacom--adobecom.hlx.live/sk/query-index.json", + "https://main--bacom--adobecom.hlx.live/th_en/query-index.json", + "https://main--bacom--adobecom.hlx.live/th_th/query-index.json", + "https://main--bacom--adobecom.hlx.live/tr/query-index.json", + "https://main--bacom--adobecom.hlx.live/tw/query-index.json", + "https://main--bacom--adobecom.hlx.live/ua/query-index.json", + "https://main--bacom--adobecom.hlx.live/uk/query-index.json", + "https://main--bacom--adobecom.hlx.live/vn_en/query-index.json", + "https://main--bacom--adobecom.hlx.live/vn_vi/query-index.json" +] diff --git a/faas-variations-report/report.js b/faas-variations-report/report.js new file mode 100644 index 0000000..b075cb9 --- /dev/null +++ b/faas-variations-report/report.js @@ -0,0 +1,129 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import { select, selectAll } from 'unist-util-select'; +import { visitParents } from 'unist-util-visit-parents'; +import { createHash } from 'crypto'; +import { BulkUpdate, ExcelReporter, loadListData } from '../bulk-update/index.js'; +import { loadDocument } from '../bulk-update/document-manager/document-manager.js'; + +const variations = {}; + +const { pathname } = new URL('.', import.meta.url); +const config = { + list: [ + `${pathname}query-indexes.json`, + ], + siteUrl: 'https://main--bacom--adobecom.hlx.live', + reporter: new ExcelReporter(`${pathname}reports/${ExcelReporter.getDateString()}.xlsx`), + outputDir: `${pathname}output`, + mdDir: `${pathname}md`, + mdCacheMs: -1, + fetchWaitMs: 20, +}; + +/** + * Retrieves the block information from a string and normalizes it. + * For example the input `Block(option1, Option2)` returns + * `{ block: 'block', options: ['option1', 'option2'] , variant: 'block (option1, option2)'}` + * And `block` returns `{ block: 'block', options: [], variant: 'block'}` + * + * @param {string} str - The input block string. + * @returns {Object} - An object containing the block name and options. + */ +export const getBlockInfo = (str) => { + const [, blockName, optionsRaw] = str.toLowerCase().match(/(\w+)\s*(?:\((.*)\))?/).map((t) => (t ? t.trim() : undefined)); + const options = optionsRaw ? optionsRaw.split(',').map((option) => option.trim()) : []; + const variant = options.length > 0 ? `${blockName} (${options.join(', ')})` : blockName; + return { blockName, options, variant }; +}; + +/** + * Maps the ancestors array and returns an array of ancestor types. + * If the ancestor type is 'gridTable', it finds the first text node in the table + * and extracts the block variant from it. + * + * @param {Array} ancestors - The array of ancestors to map. + * @returns {Array} - The array of mapped ancestor types. + */ +const mapAncestors = (ancestors) => ancestors.map((ancestor) => { + if (ancestor.type !== 'gridTable') { + return ancestor.type; + } + // find the first text node in the table + const cell = select('text', ancestor); + const { variant } = getBlockInfo(cell.value); + return `${ancestor.type} '${variant}'`; +}); + +async function loadFragments(document) { + const links = selectAll('link', document.mdast).filter((node) => node.url.includes('/fragments/')); + await Promise.all(links.map(async (node) => { + config.reporter.log('fragments', 'info', 'Found Fragment Link', { entry: document.entry, url: node.url }); + const fragmentUrl = new URL(node.url, config.siteUrl); + console.log(`Loading fragment: ${fragmentUrl.pathname}`); + const fragment = await loadDocument(fragmentUrl.pathname, config); + if (fragment && fragment.mdast) { + config.reporter.log('fragments', 'success', 'Loaded Fragment', { entry: fragment.entry, url: fragment.url }); + delete node.url; + node.type = fragment.mdast.type; + node.children = fragment.mdast.children; + } + })); +} + +/** + * Find the mdast structure variation for the faas link, "https://milo.adobe.com/tools/faas#...", and report it. + * Loop through the parent node types to analyze the structure. + * The structure is a list of all the parent node types from the perspective of the link. + * + * @param {Object} document - The document object + */ +export async function report(document) { + const pageVariations = {}; + const { mdast, entry } = document; + const faasTool = 'https://milo.adobe.com/tools/faas#'; + await loadFragments(document); + const faasLinks = selectAll('link', mdast).filter((node) => node.url.startsWith(faasTool)); + if (faasLinks.length === 0) return pageVariations; + + visitParents(mdast, 'link', (node, ancestors) => { + if (node.type === 'link' && node.url.startsWith(faasTool)) { + const structure = `${mapAncestors(ancestors).join(' > ')} > ${node.type}`; + const hash = createHash('sha1').update(structure).digest('hex').slice(0, 5); + pageVariations[hash] = pageVariations[hash] || { count: 0, structure }; + pageVariations[hash].count += 1; + config.reporter.log('faas', 'info', 'Found FaaS Link', { variation: hash, structure, entry, url: node.url }); + } + }); + + Object.entries(pageVariations).forEach(([hash, { count, structure }]) => { + variations[hash] = variations[hash] || { count: 0, structure }; + variations[hash].count += count; + }); + + return pageVariations; +} + +export async function init(list = null) { + const entryList = await loadListData(list || config.list); + config.list = entryList.filter((entry) => entry && (entry.includes('/resources/') || entry.includes('/fragments/'))); + + return config; +} + +export function migration(document) { + report(document); +} + +if (import.meta.url === `file://${process.argv[1]}`) { + const args = process.argv.slice(2); + const [list = null] = args; + + await init(list); + await BulkUpdate(config, report); + // log each variant in variations + Object.entries(variations).forEach(([hash, { count, structure }]) => { + config.reporter.log('faas-variations', 'info', 'Variation', { hash, count, structure }); + }); + + process.exit(0); +} diff --git a/package-lock.json b/package-lock.json index 931ba61..9afbece 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,6 +30,7 @@ "stylelint-config-prettier": "9.0.3", "stylelint-config-standard": "25.0.0", "unist-util-select": "^5.1.0", + "unist-util-visit-parents": "^6.0.1", "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz" }, "devDependencies": { diff --git a/package.json b/package.json index 17cd6a0..f95efda 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "stylelint-config-prettier": "9.0.3", "stylelint-config-standard": "25.0.0", "unist-util-select": "^5.1.0", + "unist-util-visit-parents": "^6.0.1", "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz" }, "lint-staged": { diff --git a/test/bulk-update/bulk-update.test.js b/test/bulk-update/bulk-update.test.js index 3ff3f45..1387248 100644 --- a/test/bulk-update/bulk-update.test.js +++ b/test/bulk-update/bulk-update.test.js @@ -1,6 +1,7 @@ import { expect } from '@esm-bundle/chai'; import { stub } from 'sinon'; import BulkUpdate, { loadListData } from '../../bulk-update/bulk-update.js'; +import BaseReporter from '../../bulk-update/reporter/reporter.js'; const { pathname } = new URL('.', import.meta.url); @@ -35,12 +36,31 @@ describe('BulkUpdater', () => { ], }), }); - const data = await loadListData('https://main--bacom--adobecom.hlx.live/query-index.json', stubFetch); + const data = await loadListData('https://main--bacom--adobecom.hlx.test/query-index.json', stubFetch); expect(data).to.be.an('array'); expect(data.length).to.equal(1); }); + it('handles a query index url from json file', async () => { + const stubFetch = stub(); + stubFetch.resolves({ + ok: true, + json: stub().resolves({ + total: 1, + offset: 0, + limit: 1, + data: [ + { path: '/test/path1' }, + ], + }), + }); + const data = await loadListData(`${pathname}mock/query-indexes.json`, stubFetch); + + expect(data).to.be.an('array'); + expect(data).to.deep.equal(['/test/path1', '/test/path1']); + }); + it('handles .txt file input', async () => { const data = await loadListData(`${pathname}mock/entries.txt`); @@ -65,6 +85,12 @@ describe('BulkUpdater', () => { expect(data).to.deep.equal(expectedData); }); + it('should return an empty array if source is not provided', async () => { + const result = await loadListData(); + expect(result).to.be.an('array'); + expect(result).to.be.empty; + }); + it('throws an error for unsupported list format', async () => { try { await loadListData('unsupported'); @@ -77,19 +103,20 @@ describe('BulkUpdater', () => { describe('main', () => { it('runs migration example', async () => { - const reporter = { log: stub(), generateTotals: stub() }; + const reporter = new BaseReporter(); const config = { list: ['/', '/test-file'], - siteUrl: 'https://main--bacom--adobecom.hlx.live', + siteUrl: 'https://main--bacom--adobecom.hlx.test', reporter, outputDir: `${pathname}output`, - mdDir: `${pathname}mock/`, + mdDir: `${pathname}mock`, mdCacheMs: -1, }; const migrate = stub(); - await BulkUpdate(config, migrate); + const totals = await BulkUpdate(config, migrate); expect(migrate.callCount).to.equal(2); + expect(totals).to.deep.equal({ load: { success: 2 } }); }); }); }); diff --git a/test/bulk-update/document-manager/document-manager.test.js b/test/bulk-update/document-manager/document-manager.test.js index 6671303..35bf868 100644 --- a/test/bulk-update/document-manager/document-manager.test.js +++ b/test/bulk-update/document-manager/document-manager.test.js @@ -7,8 +7,8 @@ import BaseReporter from '../../../bulk-update/reporter/reporter.js'; const { pathname } = new URL('.', import.meta.url); const config = { - mdDir: `${pathname}mock/`, - siteUrl: 'https://main--bacom--adobecom.hlx.live', + mdDir: `${pathname}mock`, + siteUrl: 'https://main--bacom--adobecom.hlx.test', reporter: new BaseReporter(), mdCacheMs: 0, outputDir: `${pathname}output/`, @@ -56,17 +56,17 @@ describe('DocumentManager', () => { describe('loadDocument', () => { it('loads a local file', async () => { - const entry = 'test-file'; + const entry = '/test-file'; config.mdCacheMs = -1; const document = await loadDocument(entry, config); expect(document).to.deep.equal({ entry, - path: 'test-file', + path: '/test-file', markdown, mdast, markdownFile: `${pathname}mock/test-file.md`, - url: 'https://main--bacom--adobecom.hlx.live/test-file', + url: 'https://main--bacom--adobecom.hlx.test/test-file', }); }); @@ -74,7 +74,7 @@ describe('DocumentManager', () => { const entry = '/'; config.mdDir = null; config.siteUrl = 'https://main--bacom--adobecom.hlx.page'; - config.waitMs = 0; + config.fetchWaitMs = 0; const stubFetch = stub().resolves({ ok: true, text: stub().resolves(markdown) }); @@ -83,6 +83,15 @@ describe('DocumentManager', () => { expect(document.markdown).to.equal(markdown); expect(document.mdast).to.deep.equal(mdast); }); + + it('throws an error for invalid paths', async () => { + try { + await loadDocument('test-file', config); + } catch (err) { + expect(err).to.exist; + expect(err.message).to.contain('Invalid path'); + } + }); }); describe('saveDocument', () => { diff --git a/test/bulk-update/mock/query-indexes.json b/test/bulk-update/mock/query-indexes.json new file mode 100644 index 0000000..a77c9a9 --- /dev/null +++ b/test/bulk-update/mock/query-indexes.json @@ -0,0 +1,4 @@ +[ + "https://main--bacom--adobecom.hlx.test/query-index.json", + "https://main--bacom--adobecom.hlx.test/query-index.json" +] diff --git a/test/bulk-update/reporter/excel-reporter.test.js b/test/bulk-update/reporter/excel-reporter.test.js index e88f185..70c6c5a 100644 --- a/test/bulk-update/reporter/excel-reporter.test.js +++ b/test/bulk-update/reporter/excel-reporter.test.js @@ -11,6 +11,17 @@ const deleteObjectProperty = (obj, prop) => Object.keys(obj).forEach((key) => { }); describe('ExcelReporter', () => { + describe('getDateString', () => { + it('returns the formatted date string', () => { + const date = new Date('2024-01-01T12:34:56'); + const expectedDateString = '01-01-2024_12-34'; + + const actualDateString = ExcelReporter.getDateString(date); + + expect(actualDateString).to.equal(expectedDateString); + }); + }); + describe('Check sheets js library is called', () => { const sandbox = sinon.createSandbox(); @@ -97,6 +108,25 @@ describe('ExcelReporter', () => { }); }); + it('appends object to sheet', () => { + const reporter = new ExcelReporter(); + + reporter.log('topic', 'status', 'message', { key: 'value' }); + expect(reporter.workbook.SheetNames).to.deep.equal(['Totals', 'topic']); + + const topicSheet = reporter.workbook.Sheets.topic; + deleteObjectProperty(topicSheet, 't'); + expect(topicSheet).to.deep.equal({ + '!ref': 'A1:C2', + A1: { v: 'Status' }, + B1: { v: 'Message' }, + A2: { v: 'status' }, + B2: { v: 'message' }, + C1: { v: 'key' }, + C2: { v: 'value' }, + }); + }); + it('produces totals sheet when calculating totals', () => { const reporter = new ExcelReporter(); diff --git a/test/faas-variations/faas-variations-report.test.js b/test/faas-variations/faas-variations-report.test.js new file mode 100644 index 0000000..c8ab303 --- /dev/null +++ b/test/faas-variations/faas-variations-report.test.js @@ -0,0 +1,64 @@ +import { expect } from '@esm-bundle/chai'; +import { getBlockInfo, init, report } from '../../faas-variations-report/report.js'; +import { loadDocument } from '../../bulk-update/document-manager/document-manager.js'; +import BaseReporter from '../../bulk-update/reporter/reporter.js'; + +const { pathname } = new URL('.', import.meta.url); + +describe('FaaS Variations Report', () => { + describe('getBlockInfo', () => { + const tests = [ + ['Block(option1, Option2)', { blockName: 'block', options: ['option1', 'option2'], variant: 'block (option1, option2)' }], + ['Block(option1)', { blockName: 'block', options: ['option1'], variant: 'block (option1)' }], + ['block', { blockName: 'block', options: [], variant: 'block' }], + ]; + + tests.forEach(([input, expectedOutput]) => { + it(`converts correct block information from '${input}' to '${expectedOutput.variant}'`, () => { + expect(getBlockInfo(input)).to.deep.equal(expectedOutput); + }); + }); + }); + + describe('test variations', () => { + const tests = [ + ['/au/resources/webinars/extending-content-for-every-interaction', [{ + count: 1, + structure: "root > gridTable 'text' > gtBody > gtRow > gtCell > paragraph > link", + }]], + ['/au/resources/ebooks/5-ai-powered-strategies-for-ecommerce-personalization', [{ + count: 1, + structure: "root > gridTable 'text (mobile max width)' > gtBody > gtRow > gtCell > paragraph > link", + }]], + ['/au/resources/ebooks/elements-of-engagement-marketing', [{ + count: 1, + structure: "root > gridTable 'text' > gtBody > gtRow > gtCell > paragraph > link", + }]], + ['/au/resources/webinars/marketos-secrets-to-social-media-marketing', [{ + count: 1, + structure: "root > gridTable 'columns (contained)' > gtBody > gtRow > gtCell > paragraph > link", + }]], + ['/au/resources/webinars/winning-strategies-for-b2b-ecommerce-in-2023', [{ + count: 1, + structure: "root > gridTable 'marquee (small, light)' > gtBody > gtRow > gtCell > paragraph > strong > root > paragraph > link", + }]], + ['/au/resources/digital-trends-report', [{ + count: 1, + structure: 'root > paragraph > link', + }]], + ]; + tests.forEach(async ([entry, result]) => { + it(`reports variations for ${entry}`, async () => { + const config = await init(entry); + config.siteUrl = 'https://main--bacom--adobecom.hlx.test'; + config.mdDir = `${pathname}mock`; + config.mdCacheMs = -1; + config.reporter = new BaseReporter(); + + const document = await loadDocument(entry, config); + const variations = await report(document); + expect(Object.values(variations)).to.deep.equal(result); + }); + }); + }); +}); diff --git a/test/faas-variations/mock/au/fragments/resources/cards/thank-you-collections/commerce.md b/test/faas-variations/mock/au/fragments/resources/cards/thank-you-collections/commerce.md new file mode 100644 index 0000000..69f4cdd --- /dev/null +++ b/test/faas-variations/mock/au/fragments/resources/cards/thank-you-collections/commerce.md @@ -0,0 +1 @@ +[Content as a Service - commerce - Monday, 18 September 2023 at 08.53](https://main--milo--adobecom.hlx.page/tools/caas#eyJhbmFseXRpY3NDb2xsZWN0aW9uTmFtZSI6IiIsImFuYWx5dGljc1RyYWNrSW1wcmVzc2lvbiI6ZmFsc2UsImFuZExvZ2ljVGFncyI6W3siaW50cmFUYWdMb2dpYyI6Ik9SIiwiYW5kVGFncyI6WyJjYWFzOmNvbnRlbnQtdHlwZS9hcnRpY2xlIiwiY2Fhczpjb250ZW50LXR5cGUvY3VzdG9tZXItc3RvcnkiLCJjYWFzOmNvbnRlbnQtdHlwZS9kZW1vIiwiY2Fhczpjb250ZW50LXR5cGUvZWJvb2siLCJjYWFzOmNvbnRlbnQtdHlwZS9ndWlkZSIsImNhYXM6Y29udGVudC10eXBlL2luZm9ncmFwaGljIiwiY2Fhczpjb250ZW50LXR5cGUvcmVwb3J0IiwiY2Fhczpjb250ZW50LXR5cGUvdmlkZW8iLCJjYWFzOmNvbnRlbnQtdHlwZS93ZWJpbmFyIiwiY2Fhczpjb250ZW50LXR5cGUvd2hpdGUtcGFwZXIiLCJjYWFzOmNvbnRlbnQtdHlwZS9wcm9kdWN0LXRvdXIiXX0seyJpbnRyYVRhZ0xvZ2ljIjoiQU5EIiwiYW5kVGFncyI6WyJjYWFzOnByb2R1Y3RzL2Fkb2JlLWNvbW1lcmNlIl19XSwiYm9va21hcmtJY29uU2VsZWN0IjoiIiwiYm9va21hcmtJY29uVW5zZWxlY3QiOiIiLCJjYXJkU3R5bGUiOiIxOjIiLCJjb2xsZWN0aW9uQnRuU3R5bGUiOiJwcmltYXJ5IiwiY29sbGVjdGlvbk5hbWUiOiJjb21tZXJjZSIsImNvbGxlY3Rpb25TaXplIjoiIiwiY29udGFpbmVyIjoiMzJNYXJnaW4iLCJjb250ZW50VHlwZVRhZ3MiOltdLCJjb3VudHJ5IjoiY2Fhczpjb3VudHJ5L3VzIiwiZG9Ob3RMYXp5TG9hZCI6ZmFsc2UsImRpc2FibGVCYW5uZXJzIjpmYWxzZSwiZHJhZnREYiI6ZmFsc2UsImVuZHBvaW50Ijoid3d3LmFkb2JlLmNvbS9jaGltZXJhLWFwaS9jb2xsZWN0aW9uIiwiZW52aXJvbm1lbnQiOiIiLCJleGNsdWRlZENhcmRzIjpbXSwiZXhjbHVkZVRhZ3MiOltdLCJmYWxsYmFja0VuZHBvaW50IjoiIiwiZmVhdHVyZWRDYXJkcyI6W10sImZpbHRlckV2ZW50IjoiIiwiZmlsdGVyTG9jYXRpb24iOiJsZWZ0IiwiZmlsdGVyTG9naWMiOiJvciIsImZpbHRlcnMiOltdLCJmaWx0ZXJzU2hvd0VtcHR5IjpmYWxzZSwiZ3V0dGVyIjoiNHgiLCJpbmNsdWRlVGFncyI6W10sImxhbmd1YWdlIjoiY2FhczpsYW5ndWFnZS9lbiIsImxheW91dFR5cGUiOiIzdXAiLCJsb2FkTW9yZUJ0blN0eWxlIjoicHJpbWFyeSIsIm9ubHlTaG93Qm9va21hcmtlZENhcmRzIjpmYWxzZSwib3JMb2dpY1RhZ3MiOltdLCJwYWdpbmF0aW9uQW5pbWF0aW9uU3R5bGUiOiJwYWdlZCIsInBhZ2luYXRpb25FbmFibGVkIjpmYWxzZSwicGFnaW5hdGlvblF1YW50aXR5U2hvd24iOmZhbHNlLCJwYWdpbmF0aW9uVHlwZSI6Im5vbmUiLCJwYWdpbmF0aW9uVXNlVGhlbWUzIjpmYWxzZSwicGxhY2Vob2xkZXJVcmwiOiIiLCJyZXN1bHRzUGVyUGFnZSI6IjMiLCJzZWFyY2hGaWVsZHMiOltdLCJzZXRDYXJkQm9yZGVycyI6dHJ1ZSwic2hvd0Jvb2ttYXJrc0ZpbHRlciI6ZmFsc2UsInNob3dCb29rbWFya3NPbkNhcmRzIjpmYWxzZSwic2hvd0ZpbHRlcnMiOmZhbHNlLCJzaG93U2VhcmNoIjpmYWxzZSwic2hvd1RvdGFsUmVzdWx0cyI6ZmFsc2UsInNvcnREYXRlQXNjIjpmYWxzZSwic29ydERhdGVEZXNjIjpmYWxzZSwic29ydERlZmF1bHQiOiJyYW5kb20iLCJzb3J0RW5hYmxlUG9wdXAiOmZhbHNlLCJzb3J0RW5hYmxlUmFuZG9tU2FtcGxpbmciOmZhbHNlLCJzb3J0RXZlbnRTb3J0IjpmYWxzZSwic29ydEZlYXR1cmVkIjpmYWxzZSwic29ydFJhbmRvbSI6ZmFsc2UsInNvcnRSZXNlcnZvaXJQb29sIjoxMDAwLCJzb3J0UmVzZXJ2b2lyU2FtcGxlIjozLCJzb3J0VGl0bGVBc2MiOmZhbHNlLCJzb3J0VGl0bGVEZXNjIjpmYWxzZSwic291cmNlIjpbImJhY29tIl0sInRhZ3NVcmwiOiJ3d3cuYWRvYmUuY29tL2NoaW1lcmEtYXBpL3RhZ3MiLCJ0YXJnZXRBY3Rpdml0eSI6IjU2NDQzNiIsInRhcmdldEVuYWJsZWQiOnRydWUsInRoZW1lIjoibGlnaHRlc3QiLCJ0b3RhbENhcmRzVG9TaG93IjoiMTUwIiwidXNlTGlnaHRUZXh0IjpmYWxzZSwidXNlT3ZlcmxheUxpbmtzIjpmYWxzZSwidXNlckluZm8iOltdLCJhZGRpdGlvbmFsUmVxdWVzdFBhcmFtcyI6W10sImNhcmRUaXRsZUFjY2Vzc2liaWxpdHlMZXZlbCI6NiwiY29sbGVjdGlvblRpdGxlIjoiIiwiY3VzdG9tQ2FyZCI6IiIsImN0YUFjdGlvbiI6Il9zZWxmIiwic29ydERhdGVNb2RpZmllZCI6ZmFsc2UsInNvcnRNb2RpZmllZEFzYyI6ZmFsc2UsInNvcnRNb2RpZmllZERlc2MiOmZhbHNlLCJ0aXRsZUhlYWRpbmdMZXZlbCI6ImgzIiwiY29sbGVjdGlvbkJ1dHRvblN0eWxlIjoicHJpbWFyeSIsImF1dG9Db3VudHJ5TGFuZyI6dHJ1ZSwiaGlkZUN0YUlkcyI6W10sImZpbHRlckJ1aWxkUGFuZWwiOiJhdXRvbWF0aWMiLCJmaWx0ZXJzQ3VzdG9tIjpbXSwiaGVhZGVycyI6W10sImhpZGVDdGFUYWdzIjpbXSwiZGV0YWlsc1RleHRPcHRpb24iOiJkZWZhdWx0In0=) diff --git a/test/faas-variations/mock/au/fragments/resources/modal/forms/winning-strategies-for-b2b-ecommerce-in-2023.md b/test/faas-variations/mock/au/fragments/resources/modal/forms/winning-strategies-for-b2b-ecommerce-in-2023.md new file mode 100644 index 0000000..5eb9a78 --- /dev/null +++ b/test/faas-variations/mock/au/fragments/resources/modal/forms/winning-strategies-for-b2b-ecommerce-in-2023.md @@ -0,0 +1,9 @@ +[Form as a Service - Offer Form for a.com - Global (79) - Tuesday, 18 July 2023 at 17:36](https://milo.adobe.com/tools/faas#eyIxNDkiOiIiLCIxNzIiOiIiLCJsIjoiZW5fdXMiLCJkIjoiaHR0cHM6Ly9idXNpbmVzcy5hZG9iZS5jb20vYXUvcmVzb3VyY2VzL3dlYmluYXJzL3dpbm5pbmctc3RyYXRlZ2llcy1mb3ItYjJiLWVjb21tZXJjZS1pbi0yMDIzL3RoYW5rLXlvdS5odG1sIiwiYXIiOnRydWUsInRlc3QiOmZhbHNlLCJxIjp7fSwicGMiOnsiMSI6ImpzIiwiMiI6ImZhYXNfc3VibWlzc2lvbiIsIjMiOiIiLCI0IjoiIiwiNSI6IiJ9LCJwIjp7ImpzIjp7IjM2IjoiNzAxNVkwMDAwMDRCWGUyUUFHIiwiMzkiOiIiLCI3NyI6MSwiNzgiOjEsIjc5IjoxLCI5MCI6IkZBQVMiLCI5MiI6Mjg0NiwiOTMiOiIyODQ3IiwiOTQiOjMyNzl9fSwiYXMiOmZhbHNlLCJvIjp7fSwiZSI6e30sImNvb2tpZSI6eyJwIjp7ImpzIjp7fX19LCJ1cmwiOnsicCI6eyJqcyI6eyIzNiI6IjcwMTMwMDAwMDAwa1llMEFBRSJ9fX0sIm9uZXRydXN0X2FkdmVydGlzaW5nX2FjY2VwdGFuY2UiOiJ5ZXMiLCJvbmV0cnVzdF9wZXJmb3JtYW5jZV9hY2NlcHRhbmNlIjoieWVzIiwib25ldHJ1c3RfZnVuY3Rpb25hbGl0eV9hY2NlcHRhbmNlIjoieWVzIiwiY2xlYXJiaXRTdGVwIjoxLCJmb3JtVGFnIjoiZmFhcy1PZmZlciIsImlkIjoiNzkiLCJfZmMiOjEsImNvbXBsZXRlIjpmYWxzZSwidGl0bGUiOiJDb21wbGV0ZSB0aGUgZm9ybSB0byB3YXRjaCB0aGUgb24tZGVtYW5kIHdlYmluYXIuIiwic3R5bGVfbGF5b3V0IjoiY29sdW1uMiIsImNsZWFiaXRTdHlsZSI6IiIsInRpdGxlX3NpemUiOiJwIiwidGl0bGVfYWxpZ24iOiJsZWZ0IiwicGpzMzYiOiI3MDE1WTAwMDAwNEJ4dnVRQUMiLCJwanMzOSI6IiIsInBqczkyIjoyODQ2LCJwanM5MyI6IjI4NDciLCJwanM5NCI6IjMxOTciLCJxMTAzIjpbXSwicGMxIjoianMiLCJwYzIiOiJmYWFzX3N1Ym1pc3Npb24iLCJwYzMiOmZhbHNlLCJwYzQiOmZhbHNlLCJwYzUiOmZhbHNlfQ==) + ++---------------------------+ +| **Section Metadata** | ++-----------+---------------+ +| style | resource-form | ++-----------+---------------+ + +--- diff --git a/test/faas-variations/mock/au/fragments/resources/request-demo-do-for-your-business.md b/test/faas-variations/mock/au/fragments/resources/request-demo-do-for-your-business.md new file mode 100644 index 0000000..539396d --- /dev/null +++ b/test/faas-variations/mock/au/fragments/resources/request-demo-do-for-your-business.md @@ -0,0 +1,11 @@ ++:---------------------------------------------------x----------------------------------------------------:+ +| **marquee (medium, dark)** | ++----------------------------------------------------x-----------------------------------------------------+ +| ![][image0] | ++---------------------------------------------x----------------------------------------------+------x------+ +| ## What can Adobe do for your business? | | +| | | +| _[Request Demo](https://business.adobe.com/au/request-consultation/experience-cloud#_dnt)_ | | ++--------------------------------------------------------------------------------------------+-------------+ + +[image0]: https://main--bacom--adobecom.hlx.page/media_106807cab5823328f19d4851850381f5f57cd5cac.png#width=1440&height=486 diff --git a/test/faas-variations/mock/au/resources/digital-trends-report.md b/test/faas-variations/mock/au/resources/digital-trends-report.md new file mode 100644 index 0000000..417b83a --- /dev/null +++ b/test/faas-variations/mock/au/resources/digital-trends-report.md @@ -0,0 +1,425 @@ ++------------------------------------------+ +| breadcrumbs | ++==========================================+ +| - [Home](https://business.adobe.com/au/) | +| - Adobe Resource Centre | ++------------------------------------------+ + ++:---------------------------------------------------------------------------------------------------------------------------------x---------------------------------------------------------------------------------------------------------------------------------:+ +| **marquee** | ++----------------------------------------------------------------------------------------------------------------------------------x----------------------------------------------------------------------------------------------------------------------------------+ +| \#000000 | ++-----------------------------------------------------------------------------x-----------------------------------------------------------------------------+----------------------------------------------------x----------------------------------------------------+ +| ADOBE 2023 DIGITAL TRENDS REPORT | | +| | | +| ## Creativity is your competitive edge. | | +| | | +| Now in its 13th year, the data and research in the _Digital Trends_ report shows you how today’s trends and opportunities will shape the digital economy. | | +| | | +| **[Get the report](https://main--bacom--adobecom.hlx.page/au/resources/digital-trends-report#ready-set-go-get-the-2023-digital-trends-report)** | | ++-----------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------+ + +--- + ++------------------------------------------------------------------------------------------------------------------------+ +| text (full-width) | ++========================================================================================================================+ +| ## This year’s trends point to how innovation and creativity will fuel your wow factor. | +| | +| Customers are always raising the bar for what makes a great experience — delighted one day and dismissive the next. | +| This puts pressure on organisations to continually meet and exceed these evolving standards. The _2023 Digital Trends_ | +| report shows how brands that embrace creativity across their ideas, processes and technologies will lead with great | +| experiences. | ++------------------------------------------------------------------------------------------------------------------------+ + ++-----------------------------------------------------------+ +| section metadata | ++============+==============================================+ +| style | Dark | ++------------+----------------------------------------------+ +| background | linear-gradient(180deg, rgba(64, 70, 202, 1) | +| | 0\.0%,rgba(28, 96, 197, 1) 100.0%) | ++------------+----------------------------------------------+ + +--- + ++---------------------------------------------------------------------------------------------------------+ +| text (vertical, center) | ++=========================================================================================================+ +| | +| | +| ### Prioritise innovation. | +| | +| Give teams the time and resources to flex creatively across the customer experience. | ++---------------------------------------------------------------------------------------------------------+ + ++------------------------------------------------------------------------------------------+ +| text (vertical, center) | ++==========================================================================================+ +| ![][image0] | +| | +| ### Infuse content systems with efficiency. | +| | +| Let automation and improved workflow overcome friction in content creation and delivery. | ++------------------------------------------------------------------------------------------+ + ++--------------------------------------------------------------------------------+ +| text (vertical, center) | ++================================================================================+ +| ![][image1] | +| | +| ### Pair insight and instinct. | +| | +| Blend data with human insights for more meaningful activation and interaction. | ++--------------------------------------------------------------------------------+ + ++-----------------------------+ +| section metadata | ++============+================+ +| background | \#1C60C5 | ++------------+----------------+ +| style | Dark, three-up | ++------------+----------------+ + +--- + ++---------------------------------------------------------------------------------------------------------------------------------------------------+ +| Text (vertical, center) | ++---------------------------------------------------------------------------------------------------------------------------------------------------+ +| **_[Get the report](https://main--bacom--adobecom.hlx.page/au/resources/digital-trends-report#ready-set-go-get-the-2023-digital-trends-report)_** | ++---------------------------------------------------------------------------------------------------------------------------------------------------+ + ++------------------------------+ +| section metadata | ++------------+-----------------+ +| background | \#1C60C5 | ++------------+-----------------+ +| style | Dark, s spacing | ++------------+-----------------+ + +--- + ++----------------------------------------------------------------------------------------------------------------------+ +| ## **text (full-width, center)** | ++----------------------------------------------------------------------------------------------------------------------+ +| ## The digital trends show what leaders are doing. | +| | +| In the _2023 Digital Trends_ report, we’ve broken the data out among “leading” and “mainstream” organizations to get | +| a sense of where both have been. Survey respondents agreed with the following statements: | ++----------------------------------------------------------------------------------------------------------------------+ + ++-------------------------------+ +| **section metadata** | ++-----------+-------------------+ +| style | l spacing, center | ++-----------+-------------------+ + +--- + ++---------------------------------------------------------------------------------------------------------+ +| **text (vertical, center)** | ++---------------------------------------------------------------------------------------------------------+ +| | +| | +| #### Customer expectations are constantly resetting to match their best omnichannel experiences. | ++---------------------------------------------------------------------------------------------------------+ + ++---------------------------------------------------------------------------------------------------------+ +| **text (vertical, center)** | ++---------------------------------------------------------------------------------------------------------+ +| | +| | +| #### The demand for content has significantly increased. | ++---------------------------------------------------------------------------------------------------------+ + ++---------------------------------------------------------------------------------------------------------+ +| **text (vertical, center)** | ++---------------------------------------------------------------------------------------------------------+ +| | +| | +| #### Emphasis on immediate needs at the cost of longer-term planning. | ++---------------------------------------------------------------------------------------------------------+ + ++---------------------------------+ +| **section metadata** | ++-----------+---------------------+ +| style | three-up, l spacing | ++-----------+---------------------+ + +--- + ++---------------------------------------------------------------------+ +| **text (full-width)** | ++---------------------------------------------------------------------+ +| # Over the last three years, would you agree with these statements? | ++---------------------------------------------------------------------+ + +![][image2]**Leaders** ![][image3] ![][image4]**Mainstream** + ++:---------x----------:+ +| **section-metadata** | ++-----x-----+----x-----+ +| style | center | ++-----------+----------+ + +--- + ++:----------x----------:+ +| **section-metadata** | ++-----x-----+-----x-----+ +| style | l spacing | ++-----------+-----------+ + +--- + ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| marquee (medium, light) | ++===================================================================================================================================================+=========================================================================================================+ +| ## Get the 2023 _Digital Trends_. | | +| | | +| Discover the trends driving customer experience in 2023 — and how you can stay one step ahead. | | +| | | +| **_[Get the report](https://main--bacom--adobecom.hlx.page/au/resources/digital-trends-report#ready-set-go-get-the-2023-digital-trends-report)_** | | ++---------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------+ + ++------------------------------------------------------------------------+ +| section metadata | ++------------+-----------------------------------------------------------+ +| background | linear-gradient(35deg, rgba(235, 16, 0, 1) 0.0%,rgba(229, | +| | 74, 148, 1) 43.5%,rgba(229, 74, 148, 1) 97.8%) | ++------------+-----------------------------------------------------------+ +| style | Light | ++------------+-----------------------------------------------------------+ + +--- + ++:-------------------------------------------------------x-------------------------------------------------------:+ +| **text (full-width)** | ++--------------------------------------------------------x--------------------------------------------------------+ +| ### The trends shaping your business needs or industry. | +| | +| Focus on relevant trends influencing your industry in our series of reports or learn how Adobe Experience Cloud | +| products help prioritise your biggest business needs. | ++-----------------------------------------------------------------------------------------------------------------+ + ++:---------------------------------x----------------------------------:+ +| **section-metadata** | ++-----x------+----------------------------x----------------------------+ +| | linear-gradient(0deg, rgba(36, 36, 36, 1) 0.0%,rgba(34, | +| background | 34, 34, 1) 75.0%,rgba(83, 83, 83, 1) 100.0%) | ++-----x------+----------------------------x----------------------------+ +| style | Dark | ++------------+---------------------------------------------------------+ + +--- + ++:----------x----------:+ +| **Tabs (center)** | ++-----------x-----------+ +| 1. Industry | +| 2. Business needs | ++-----x------+----x-----+ +| Active tab | Industry | ++------------+----------+ + ++:----------x----------:+ +| **section-metadata** | ++-----x------+----x-----+ +| background | \#353535 | ++-----x------+----x-----+ +| style | Dark | ++------------+----------+ + +--- + ++:--------------------------------------------------x--------------------------------------------------:+ +| **text** | ++---------------------------------------------------x---------------------------------------------------+ +| | +| | +| **Retail trends** | +| | +| _[Get the report](https://main--bacom--adobecom.hlx.page/resources/reports/retail-digital-trends)_ | ++-------------------------------------------------------------------------------------------------------+ + ++:------------------------------------------------------x-------------------------------------------------------:+ +| **text** | ++-------------------------------------------------------x--------------------------------------------------------+ +| | +| | +| **Financial services trends** | +| | +| _[Get the report](https://main--bacom--adobecom.hlx.page/resources/reports/financial-services-digital-trends)_ | ++----------------------------------------------------------------------------------------------------------------+ + ++:--------------------------------------------------x--------------------------------------------------:+ +| **text** | ++---------------------------------------------------x---------------------------------------------------+ +| | +| | +| **B2B and high tech trends** | +| | +| _[Get the report](https://main--bacom--adobecom.hlx.page/resources/reports/high-tech-digital-trends)_ | ++-------------------------------------------------------------------------------------------------------+ + ++:---------------------------------------------------------x---------------------------------------------------------:+ +| **text** | ++----------------------------------------------------------x----------------------------------------------------------+ +| | +| | +| **Media and entertainment trends** | +| | +| _[Get the report](https://main--bacom--adobecom.hlx.page/resources/reports/media-and-entertainment-digital-trends)_ | ++---------------------------------------------------------------------------------------------------------------------+ + ++:---------------------------------x----------------------------------:+ +| **section-metadata** | ++-----x------+----------------------------x----------------------------+ +| tab | Industry | ++-----x------+----------------------------x----------------------------+ +| style | Four up, xxl spacing | ++-----x------+----------------------------x----------------------------+ +| | linear-gradient(0deg, rgba(36, 36, 36, 1) 0.0%,rgba(34, | +| background | 34, 34, 1) 75.0%,rgba(83, 83, 83, 1) 100.0%) | ++------------+---------------------------------------------------------+ + +--- + ++:-----------------------------------------------------x------------------------------------------------------:+ +| **text** | ++------------------------------------------------------x-------------------------------------------------------+ +| | +| | +| **Data and insights trends** | +| | +| _[Get the report](https://main--bacom--adobecom.hlx.page/resources/digital-trends-data-and-insights-report)_ | ++--------------------------------------------------------------------------------------------------------------+ + ++:----------------------------------------------------x-----------------------------------------------------:+ +| **text** | ++-----------------------------------------------------x------------------------------------------------------+ +| | +| | +| **Work management trends** | +| | +| _[Get the report](https://main--bacom--adobecom.hlx.page/resources/digital-trends-work-management-report)_ | ++------------------------------------------------------------------------------------------------------------+ + ++:------------------------------------------------------x------------------------------------------------------:+ +| **text** | ++-------------------------------------------------------x-------------------------------------------------------+ +| | +| | +| **Customer journeys trends** | +| | +| _[Get the report](https://main--bacom--adobecom.hlx.page/resources/digital-trends-journey-management-report)_ | ++---------------------------------------------------------------------------------------------------------------+ + ++:------------------------------------------------------x------------------------------------------------------:+ +| **text** | ++-------------------------------------------------------x-------------------------------------------------------+ +| | +| | +| **Content management trends** | +| | +| _[Get the report](https://main--bacom--adobecom.hlx.page/resources/digital-trends-content-management-report)_ | ++---------------------------------------------------------------------------------------------------------------+ + ++:---------------------------------x----------------------------------:+ +| **section-metadata** | ++-----x------+----------------------------x----------------------------+ +| tab | Business needs | ++-----x------+----------------------------x----------------------------+ +| style | Four up, xxl spacing | ++-----x------+----------------------------x----------------------------+ +| | linear-gradient(0deg, rgba(36, 36, 36, 1) 0.0%,rgba(34, | +| background | 34, 34, 1) 75.0%,rgba(83, 83, 83, 1) 100.0%) | ++------------+---------------------------------------------------------+ + +--- + ++----------------------------------------------------------+ +| text (full-width, large) | ++----------------------------------------------------------+ +| ## Ready, set, go. Get the _2023 Digital Trends_ report. | ++----------------------------------------------------------+ + +[Form as a Service - DX Offer-custom POI dropdown (113) - Wednesday, July 12, 2023 at 15:34](https://milo.adobe.com/tools/faas#eyIxNDkiOiIiLCIxNzIiOiJBZG9iZSBXb3JrZnJvbnQgaXMgeW91ciB3b3JrIG1hbmFnZW1lbnQgYXBwbGljYXRpb24iLCJpZCI6IjExMyIsImwiOiJlbl91cyIsImQiOiJodHRwczovL21haW4tLWJhY29tLS1hZG9iZWNvbS5obHgucGFnZS9hdS9yZXNvdXJjZXMvc2RrL2RpZ2l0YWwtdHJlbmRzLXJlcG9ydCIsImFzIjpmYWxzZSwiYXIiOnRydWUsInBjIjp7IjEiOiJqcyIsIjIiOiJmYWFzX3N1Ym1pc3Npb24iLCIzIjoic2ZkYyIsIjQiOiJkZW1hbmRiYXNlIiwiNSI6IiJ9LCJxIjp7fSwicCI6eyJqcyI6eyIzNiI6IiIsIjM5IjoiIiwiNzciOjEsIjc4IjoxLCI3OSI6MSwiOTAiOiJGQUFTIiwiOTIiOiIyODQ2IiwiOTMiOiIyODQ4IiwiOTQiOiIifX0sImUiOnt9LCJwanM5MyI6IjI4NDciLCJwanM5NCI6IjMyNzMiLCJwanMzNiI6IjcwMTVZMDAwMDA0QlpnV1FBVyIsImlzR2F0ZSI6ZmFsc2UsInBjMSI6dHJ1ZSwicGMyIjp0cnVlLCJwYzMiOnRydWUsInBjNCI6dHJ1ZSwic3R5bGVfYmFja2dyb3VuZFRoZW1lIjoid2hpdGUiLCJzdHlsZV9sYXlvdXQiOiJjb2x1bW4xIiwicGpzMzkiOiIiLCJwanM5MiI6IjI4NDYiLCJxMTAzIjp7fSwicGM1IjpmYWxzZSwidGl0bGUiOiIiLCJ0aXRsZV9zaXplIjoiaDQiLCJ0aXRsZV9hbGlnbiI6ImNlbnRlciIsImhpZGVQcmVwb3B1bGF0ZWQiOmZhbHNlfQ==) + ++--------------------------------------------------+ +| **Section Metadata** | ++-----------+--------------------------------------+ +| style | container, xl spacing, resource-form | ++-----------+--------------------------------------+ + +--- + ++--------------------------------------------------------------------------------+ +| **Metadata** | ++--------------------+-----------------------------------------------------------+ +| Title | Digital Trends 2023 Report: Download Today \| Adobe | +| | Business | ++--------------------+-----------------------------------------------------------+ +| robots | noodp | ++--------------------+-----------------------------------------------------------+ +| Description | The Adobe Digital Trends report gives brands the data & | +| | context for winning strategies for the year ahead. See | +| | how your business can grow with Adobe. | ++--------------------+-----------------------------------------------------------+ +| keywords | Experience Manager, IT, Discover, Campaign, Read report, | +| | Advertising, Commerce, Digital, Evaluate, Marketing, | +| | Experience Platform, Decision Maker, Marketing, Feature | +| | Evaluator, Analytics, Discover, North America, Experience | +| | Cloud, Decision Maker, Audience Manager, Customer Journey | +| | Analytics, Vision Leader, Commerce, Advertising, Target, | +| | Real-Time Customer Data Platform, Report, Digital, Vision | +| | Leader, Explore, Evaluate, Marketo Engage, Journey | +| | Orchestration, IT, Workfront, Explore | ++--------------------+-----------------------------------------------------------+ +| serp-content-type | thought-leadership | ++--------------------+-----------------------------------------------------------+ +| pageCreatedAt | en | ++--------------------+-----------------------------------------------------------+ +| translated | false | ++--------------------+-----------------------------------------------------------+ +| publishDate | 2023-03-16T11:54:09.254Z | ++--------------------+-----------------------------------------------------------+ +| productJcrID | products:SG\_EXPERIENCECLOUD | ++--------------------+-----------------------------------------------------------+ +| primaryProductName | EXPERIENCE CLOUD | ++--------------------+-----------------------------------------------------------+ +| image | ![][image5] | ++--------------------+-----------------------------------------------------------+ +| Gnav-source | | ++--------------------+-----------------------------------------------------------+ +| Footer-source | | ++--------------------+-----------------------------------------------------------+ + ++-----------------------------------------------------------------------------+ +| **Card Metadata** | ++-----------------+-----------------------------------------------------------+ +| title | Get the 2023 Digital Trends. | ++-----------------+-----------------------------------------------------------+ +| cardImagePath | ![][image5] | ++-----------------+-----------------------------------------------------------+ +| CardDescription | Now in its 13th year, the data and research in the | +| | Digital Trends report shows you how creativity and | +| | innovation can give you a competitive edge in the digital | +| | economy. | ++-----------------+-----------------------------------------------------------+ +| primaryTag | caas:content-type/Report | ++-----------------+-----------------------------------------------------------+ +| tags | caas:content-type/Report | ++-----------------+-----------------------------------------------------------+ + +[image0]: https://main--bacom--adobecom.hlx.page/media_18e5e7920d74e2bde86c1322929019973dbdcedf8.gif#width=756&height=426 + +[image1]: https://main--bacom--adobecom.hlx.page/media_1795a20f73710d8aceec33953d5aa431ab0aff89b.gif#width=756&height=426 + +[image2]: https://main--bacom--adobecom.hlx.page/media_1b08cf7bae0bc7e2eb0bccaa7b64758014a6a986d.jpeg#width=29&height=29 + +[image3]: https://main--bacom--adobecom.hlx.page/media_16c9a59625bf60f9e36e83b2215459b68de83735b.png#width=62&height=18 + +[image4]: https://main--bacom--adobecom.hlx.page/media_14f4ceeebe8782ee44fc0777505fc9c182156d461.jpeg#width=29&height=29 + +[image5]: https://main--bacom--adobecom.hlx.page/media_13e613377817189b2c7cf7cb4385548173be8eb9f.png#width=756&height=426 diff --git a/test/faas-variations/mock/au/resources/ebooks/5-ai-powered-strategies-for-ecommerce-personalization.md b/test/faas-variations/mock/au/resources/ebooks/5-ai-powered-strategies-for-ecommerce-personalization.md new file mode 100644 index 0000000..4f9921f --- /dev/null +++ b/test/faas-variations/mock/au/resources/ebooks/5-ai-powered-strategies-for-ecommerce-personalization.md @@ -0,0 +1,87 @@ ++:----------------------------------x----------------------------------:+ +| **marquee (small, light)** | ++-----------------------------------x-----------------------------------+ +| \#F5F5F5 | ++----------------------------x----------------------------+------x------+ +| **Ebook** | | +| | ![][image0] | +| # 5 AI-powered strategies for ecommerce personalization | | ++---------------------------------------------------------+-------------+ + +--- + +Check out _5 AI-Powered Strategies for Ecommerce Personalization_ to discover why 1:1 personalization is the key to unlocking exceptional online shopping experiences — and learn: + +- Why AI is the key to the next phase of ecommerce personalization +- How to move from static experiences to 1:1 experiences +- 5 AI use cases for ecommerce personalization + ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| **Text (mobile max width)** | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| [Form as a Service - Offer Form for a.com - APAC (80) - Friday, October 20, 2023 at 15:04](https://milo.adobe.com/tools/faas#eyIxNDkiOiIiLCIxNzIiOiIiLCJpZCI6IjgwIiwibCI6ImVuX3VzIiwiZCI6Imh0dHBzOi8vYnVzaW5lc3MuYWRvYmUuY29tL2F1L3Jlc291cmNlcy9lYm9va3MvNS1haS1wb3dlcmVkLXN0cmF0ZWdpZXMtZm9yLWVjb21tZXJjZS1wZXJzb25hbGl6YXRpb24vdGhhbmsteW91Lmh0bWwiLCJhcyI6ZmFsc2UsImFyIjp0cnVlLCJwYyI6eyIxIjoianMiLCIyIjoiZmFhc19zdWJtaXNzaW9uIiwiMyI6InNmZGMiLCI0IjoiZGVtYW5kYmFzZSIsIjUiOiIifSwicSI6e30sInAiOnsianMiOnsiMzYiOiIiLCIzOSI6IiIsIjc3IjoxLCI3OCI6MSwiNzkiOjEsIjkwIjoiRkFBUyIsIjkyIjoiMjg0NiIsIjkzIjoiMjg0OCIsIjk0IjoiIn19LCJlIjp7fSwidGl0bGVfYWxpZ24iOiJsZWZ0IiwidGl0bGVfc2l6ZSI6InAiLCJwYzEiOnRydWUsInBjMiI6dHJ1ZSwicGMzIjp0cnVlLCJwYzQiOnRydWUsInBqczkzIjoiMjg0NyIsInBqczk0IjoiMzE5NyIsInBqczM2IjoiNzAxNVkwMDAwMDRTTmxLUUFXIiwic3R5bGVfbGF5b3V0IjoiY29sdW1uMiIsInRpdGxlIjoiUGxlYXNlIHNoYXJlIHlvdXIgY29udGFjdCBpbmZvcm1hdGlvbiB0byBnZXQgdGhlIGVCb29rLiIsInN0eWxlX2JhY2tncm91bmRUaGVtZSI6IndoaXRlIiwicGpzMzkiOiIiLCJwanM5MiI6IjI4NDYiLCJxMTAzIjpbXSwicGM1IjpmYWxzZX0=) | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + ++------------------------------------------------+ +| **Section Metadata** | ++-----------+------------------------------------+ +| style | xxl spacing, two up, resource-form | ++-----------+------------------------------------+ + +--- + ++-----------------------------------------------------------------------------+ +| **Metadata** | ++--------------------+--------------------------------------------------------+ +| Title | 5 AI-Powered Strategies for Ecommerce Personalization | ++--------------------+--------------------------------------------------------+ +| robots | noodp | ++--------------------+--------------------------------------------------------+ +| Description | Discover why personalization is the key to unlocking | +| | exceptional online shopping experiences — and why it’s | +| | the something that can help you meet evolving customer | +| | expectations. | ++--------------------+--------------------------------------------------------+ +| keywords | North America,Ebook,Adobe Commerce,Generative | +| | AI,Personalization | ++--------------------+--------------------------------------------------------+ +| serp-content-type | thought-leadership | ++--------------------+--------------------------------------------------------+ +| pageCreatedAt | en | ++--------------------+--------------------------------------------------------+ +| translated | false | ++--------------------+--------------------------------------------------------+ +| publishDate | 2023-09-07 | ++--------------------+--------------------------------------------------------+ +| productJcrID | products:SG\_COMMERCE | ++--------------------+--------------------------------------------------------+ +| primaryProductName | Commerce | ++--------------------+--------------------------------------------------------+ +| image | ![][image1] | ++--------------------+--------------------------------------------------------+ +| georouting | off | ++--------------------+--------------------------------------------------------+ + ++-------------------+-------------------------------------------------------------------+ +| **Card Metadata** | | ++-------------------+-------------------------------------------------------------------+ +| Title | AI is the engine that powers effective personalization. | ++-------------------+-------------------------------------------------------------------+ +| cardDate | 2023-09-07 | ++-------------------+-------------------------------------------------------------------+ +| cardImage | ![][image1] | ++-------------------+-------------------------------------------------------------------+ +| CardDescription | Check out _5 AI-Powered Strategies for Ecommerce Personalization_ | +| | to discover why personalization is the key to unlocking | +| | exceptional online shopping experiences. | ++-------------------+-------------------------------------------------------------------+ +| primaryTag | caas:content-type/ebook | ++-------------------+-------------------------------------------------------------------+ +| Tags | caas:content-type/ebook, caas:region/apac, | +| | caas:products/adobe-commerce, caas:topic/generative-ai, | +| | caas:topic/personalization, caas:topic/commerce | ++-------------------+-------------------------------------------------------------------+ + +[image0]: https://main--bacom--adobecom.hlx.page/media_1cc10c7f0b18a96ed51611dabe56bbb2d424f1956.png#width=1200&height=600 + +[image1]: https://main--bacom--adobecom.hlx.page/media_190b56e77ac293338df2a4ad2aa836f0a126506a3.png#width=756&height=426 diff --git a/test/faas-variations/mock/au/resources/ebooks/elements-of-engagement-marketing.md b/test/faas-variations/mock/au/resources/ebooks/elements-of-engagement-marketing.md new file mode 100644 index 0000000..ce1173c --- /dev/null +++ b/test/faas-variations/mock/au/resources/ebooks/elements-of-engagement-marketing.md @@ -0,0 +1,107 @@ ++----------------------------------------------------------+ +| marquee (small, light) | ++==========================================================+ +| \#f5f5f5 | ++--------------------------------------------+-------------+ +| **EBOOK** | ![][image0] | +| | | +| # The 5 Principles of Engagement Marketing | | ++--------------------------------------------+-------------+ + +--- + +## **About the eBook** + +Every company has the same mission: to maximise their value. But in our view, your most valuable asset isn't your product or your branding or even your team – it's your customers. The most successful companies succeed because they excel during each stage of the customer lifecycle: in acquiring new buyers, in growing their lifetime value and in converting them into advocates. + +And today, it's on marketers to become stewards of the customer journey and to build bonds with customers wherever they are — whether that means engaging on social media, presenting a unified experience across devices or personalising content and communications. + +**That's why we've developed a strategy for you - a strategy that we call "engagement marketing."** + +**Engagement marketing is about connecting with people:** + +- As individuals +- Based on what they do +- Continuously over time +- Directed towards an outcome +- Everywhere they are + +In this ebook, we define each of those five principles and show you what an engagement marketing strategy truly looks like. To learn how you can use engagement marketing techniques in your own marketing, download our ebook: The 5 Principles of Engagement Marketing. + ++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Text | ++===================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ +| [FaaS Link - FormID: 115](https://milo.adobe.com/tools/faas#eyJsIjoiZW5fdXMiLCJkIjoiL3Jlc291cmNlcy9lYm9va3MvZWxlbWVudHMtb2YtZW5nYWdlbWVudC1tYXJrZXRpbmcvdGhhbmsteW91Lmh0bWwiLCJhciI6dHJ1ZSwidGVzdCI6ZmFsc2UsInEiOnt9LCJwYyI6eyIxIjoianMiLCIyIjoiZmFhc19zdWJtaXNzaW9uIiwiMyI6InNmZGMiLCI0IjoiZGVtYW5kYmFzZSIsIjUiOiIifSwicCI6eyJqcyI6eyIzMiI6InVua25vd24iLCIzNiI6IjcwMTVZMDAwMDA0Qlo1N1FBRyIsIjM5IjoiIiwiNzciOjEsIjc4IjoxLCI3OSI6MSwiOTAiOiJGQUFTIiwiOTIiOjI4NDYsIjkzIjoiMjg0NyIsIjk0IjozMjAwLCIxNzMiOiJodHRwOi8vbG9jYWxob3N0OjMwMDEvYXUvcmVzb3VyY2VzL2Vib29rcy9lbGVtZW50cy1vZi1lbmdhZ2VtZW50LW1hcmtldGluZy5odG1sP2hvc3Q9aHR0cHMlM2ElMmYlMmZidXNpbmVzcy5hZG9iZS5jb20ifSwiZmFhc19zdWJtaXNzaW9uIjp7fSwic2ZkYyI6eyJjb250YWN0SWQiOm51bGx9LCJkZW1hbmRiYXNlIjp7fX0sImFzIjoidHJ1ZSIsIm8iOnt9LCJlIjp7fSwiY29va2llIjp7InAiOnsianMiOnt9fX0sInVybCI6eyJwIjp7ImpzIjp7IjM2IjoiNzAxMzAwMDAwMDBrWWUwQUFFIn19fSwianMiOnsiaWQiOiIxMTUiLCJsIjoiZW5fdXMiLCJkIjoiL2F1L3Jlc291cmNlcy9lYm9va3MvZWxlbWVudHMtb2YtZW5nYWdlbWVudC1tYXJrZXRpbmcvdGhhbmsteW91Lmh0bWwiLCJhcyI6InRydWUiLCJhciI6dHJ1ZSwicGMiOnsiMSI6ImpzIiwiMiI6ImZhYXNfc3VibWlzc2lvbiIsIjMiOiJzZmRjIiwiNCI6ImRlbWFuZGJhc2UiLCI1IjoiIn0sInEiOnt9LCJwIjp7ImpzIjp7IjM2IjoiNzAxNVkwMDAwMDRCWjU3UUFHIiwiMzkiOiIiLCI3NyI6MSwiNzgiOjEsIjc5IjoxLCI5MCI6IkZBQVMiLCI5MiI6Mjg0NiwiOTMiOiIyODQ3IiwiOTQiOjMyMDB9fSwiZSI6e319LCJvbmV0cnVzdF9hZHZlcnRpc2luZ19hY2NlcHRhbmNlIjoieWVzIiwib25ldHJ1c3RfcGVyZm9ybWFuY2VfYWNjZXB0YW5jZSI6InllcyIsIm9uZXRydXN0X2Z1bmN0aW9uYWxpdHlfYWNjZXB0YW5jZSI6InllcyIsImNsZWFyYml0U3RlcCI6MSwiZm9ybVRhZyI6ImZhYXMtT2ZmZXIiLCJpZCI6IjExNSIsIl9mYyI6MSwiY29tcGxldGUiOnRydWUsInRpdGxlIjoiUGxlYXNlIHNoYXJlIHNvbWUgY29udGFjdCBpbmZvcm1hdGlvbiB0byBkb3dubG9hZCB0aGUgZUJvb2siLCJjbGVhYml0U3R5bGUiOiIiLCJ0aXRsZV9zaXplIjoicCIsInRpdGxlX2FsaWduIjoibGVmdCJ9) | ++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + ++---------------------------------------------------------+ +| Section Metadata | ++=========+===============================================+ +| style | container, xxl spacing, two-up, resource-form | ++---------+-----------------------------------------------+ + +--- + ++-------------------------------------------------------------------------------+ +| Metadata | ++====================+==========================================================+ +| Title | The 5 Principles of Engagement Marketing - Marketo | ++--------------------+----------------------------------------------------------+ +| robots | noodp | ++--------------------+----------------------------------------------------------+ +| Description | Download Marketo's valuable ebook that can help to focus | +| | on your customers and steward a rewarding customer | +| | journey. | ++--------------------+----------------------------------------------------------+ +| keywords | Marketo Engage,Marketing Automation,North | +| | America,Experience Cloud,eBook,Marketo Engage,Marketo | +| | Engage,eBook | ++--------------------+----------------------------------------------------------+ +| serp-content-type | product | ++--------------------+----------------------------------------------------------+ +| pageCreatedAt | en | ++--------------------+----------------------------------------------------------+ +| translated | false | ++--------------------+----------------------------------------------------------+ +| publishDate | 2023-02-09T14:47:46.545Z | ++--------------------+----------------------------------------------------------+ +| productJcrID | products:SG\_MARKETO\_ENGAGE | ++--------------------+----------------------------------------------------------+ +| primaryProductName | Marketo Engage | ++--------------------+----------------------------------------------------------+ +| image | ![][image1] | ++--------------------+----------------------------------------------------------+ +| caas:content-type | ebook | ++--------------------+----------------------------------------------------------+ + ++------------------------------------------------------------------------------+ +| Card Metadata | ++======================+=======================================================+ +| title | 5 principles of engagement marketing | ++----------------------+-------------------------------------------------------+ +| CardDescription | The top companies succeed because they recognise | +| | customers are their most valuable asset and can build | +| | bonds with customers wherever they are.�� | ++----------------------+-------------------------------------------------------+ +| cardDate | 2021-12-09 | ++----------------------+-------------------------------------------------------+ +| altCardImageText | | ++----------------------+-------------------------------------------------------+ +| cardImage | ![][image1] | ++----------------------+-------------------------------------------------------+ +| original\_entity\_id | 26f863be-840c-3669-8139-371ec0e0970f | ++----------------------+-------------------------------------------------------+ +| primaryTag | caas:content-type/ebook | ++----------------------+-------------------------------------------------------+ +| Tags | caas:business-unit/experience-cloud, | +| | caas:region/north-america, | +| | caas:products/marketo-engage-bizible, | +| | caas:related-product/marketo-engage, | +| | caas:topic/marketing-automation, | +| | caas:products/marketo-engage-bizible, | +| | caas:content-type/ebook, caas:content-type/ebook | ++----------------------+-------------------------------------------------------+ + +[image0]: https://main--bacom--adobecom.hlx.page/media_10f5005de3a65beb5e7c8496747bfd5a886abdc27.png#width=756&height=504 + +[image1]: https://main--bacom--adobecom.hlx.page/media_105e1ceb4ee940baa10261be582f648af3730d97a.jpeg#width=378&height=252 diff --git a/test/faas-variations/mock/au/resources/webinars/extending-content-for-every-interaction.md b/test/faas-variations/mock/au/resources/webinars/extending-content-for-every-interaction.md new file mode 100644 index 0000000..a8ba921 --- /dev/null +++ b/test/faas-variations/mock/au/resources/webinars/extending-content-for-every-interaction.md @@ -0,0 +1,165 @@ ++---------------------------+ +| breadcrumbs | ++===========================+ +| - [Home](/au) | +| - Adobe Resource Center | ++---------------------------+ + ++-----------------------------------------------------------+ +| marquee (small, light) | ++===========================================================+ +| ![][image0] | ++-----------------------------------------------+-----------+ +| # **Extending Content for Every Interaction** | | ++-----------------------------------------------+-----------+ + +--- + ++------------------------------------------------+ +| Text (light, sm-spacing) | ++================================================+ +| On-Demand webinar \| 26 mins \| Free of charge | ++------------------------------------------------+ + ++-----------------------+ +| Section Metadata | ++============+==========+ +| background | \#2FBBEC | ++------------+----------+ +| style | dark | ++------------+----------+ + +--- + ++-----------------------------------------------------------------------------------------------------------------------+ +| Text (l-spacing) | ++=======================================================================================================================+ +| ##### **Summary** | +| | +| Customer behaviour has always been fluid and your customer experience needs to reflect the dynamic journeys your | +| customers take. | +| | +| Your customers’ journeys to purchase are unique and constantly evolving and adapting to new channels, interests and | +| behaviours. Yet they expect a holistic experience regardless of the device or channel. | +| | +| An omnichannel approach isn’t new, but in this new era in experience, customers are constantly adopting new and | +| emerging channels, hopping from device to device and channel to channel, and marketers need to keep up. | +| | +| How can brands seamlessly and efficiently deliver consistent, dynamic and personalised customer experiences wherever | +| and however they’re interacting? | +| | +| Join Adobe’s Mark Szulc and Anthony Milner as they lift the lid on how to make consistent, cross-channel experiences | +| without sinking time into recreating content for each channel. | +| | +| ##### Why attend this webinar? | +| | +| In this session you'll learn: | +| | +| - Key factors brands should consider when building omnichannel experiences. | +| - Challenges that are faced by brands today when it comes to creating a consistent omnichannel experience for their | +| customers. | +| - How brands can leverage technology to deliver these consistent experiences across channels. | +| - How freeing up the authoring prcess brings the technology to life and allows craetives to do what they do best, | +| create. | +| | +| **Intended audience** | +| | +| - Direct Marketing Decision Makers and Practitioners | +| - Digital Decision Makers and Practitioners | +| - Email Marketers | +| | +| **Speakers** | ++-----------------------------------------------------------------------------------------------------------------------+ + +--- + ++-----------------------------------------------------------------------------------------------------------------------------+ +| Event Speakers | ++===========================+===========================================================================================+=====+ +| ![Mark Szulc][image1] | **Mark Szulc**\ | | +| | Principle Product Marketing Manager\ | | +| | Adobe\ | | +| | See [Mark's](https://www.linkedin.com/in/markszulc/?originalSubdomain=au) LinkedIn | | ++---------------------------+-------------------------------------------------------------------------------------------+-----+ +| ![Anthony Milner][image2] | **Anthony Milner**\ | | +| | Manager, Enterprise Product Specialists\ | | +| | Adobe\ | | +| | See [Anthony's](https://www.linkedin.com/in/anthonymilner/?originalSubdomain=au) LinkedIn | | ++---------------------------+-------------------------------------------------------------------------------------------+-----+ + ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Text | ++==========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ +| [FaaS Link - FormID: 80](https://milo.adobe.com/tools/faas#eyJsIjoiZW5fdXMiLCJkIjoiL3Jlc291cmNlcy93ZWJpbmFycy9leHRlbmRpbmctY29udGVudC1mb3ItZXZlcnktaW50ZXJhY3Rpb24vdGhhbmsteW91Lmh0bWwiLCJhciI6dHJ1ZSwidGVzdCI6ZmFsc2UsInEiOnt9LCJwYyI6eyIxIjoianMiLCIyIjoiZmFhc19zdWJtaXNzaW9uIiwiMyI6IiIsIjQiOiIiLCI1IjoiIn0sInAiOnsianMiOnsiMzIiOiJ1bmtub3duIiwiMzYiOiI3MDE1WTAwMDAwMzlyRzdRQUkiLCIzOSI6IiIsIjc3IjoxLCI3OCI6MSwiNzkiOjEsIjkwIjoiRkFBUyIsIjkyIjoyODQ2LCI5MyI6IjI4NDkiLCI5NCI6Mjg0NX0sImZhYXNfc3VibWlzc2lvbiI6e30sInNmZGMiOnsiY29udGFjdElkIjpudWxsfSwiZGVtYW5kYmFzZSI6e319LCJhcyI6ZmFsc2UsIm8iOnt9LCJlIjp7fSwiY29va2llIjp7InAiOnsianMiOnt9fX0sInVybCI6eyJwIjp7ImpzIjp7IjM2IjoiNzAxMzAwMDAwMDBrWWUwQUFFIn19fSwianMiOnsiaWQiOiI4MCIsImwiOiJlbl91cyIsImQiOiIvYXUvcmVzb3VyY2VzL3dlYmluYXJzL2V4dGVuZGluZy1jb250ZW50LWZvci1ldmVyeS1pbnRlcmFjdGlvbi90aGFuay15b3UuaHRtbCIsImFzIjpmYWxzZSwiYXIiOnRydWUsInBjIjp7IjEiOiJqcyIsIjIiOiJmYWFzX3N1Ym1pc3Npb24iLCIzIjoiIiwiNCI6IiIsIjUiOiIifSwicSI6e30sInAiOnsianMiOnsiMzYiOiI3MDE1WTAwMDAwMzlyRzdRQUkiLCIzOSI6IiIsIjc3IjoxLCI3OCI6MSwiNzkiOjEsIjkwIjoiRkFBUyIsIjkyIjoyODQ2LCI5MyI6IjI4NDkiLCI5NCI6Mjg0NX19LCJlIjp7fX0sIm9uZXRydXN0X2FkdmVydGlzaW5nX2FjY2VwdGFuY2UiOiJ5ZXMiLCJvbmV0cnVzdF9wZXJmb3JtYW5jZV9hY2NlcHRhbmNlIjoieWVzIiwib25ldHJ1c3RfZnVuY3Rpb25hbGl0eV9hY2NlcHRhbmNlIjoieWVzIiwiY2xlYXJiaXRTdGVwIjoxLCJmb3JtVGFnIjoiZmFhcy1PZmZlciIsImlkIjoiODAiLCJfZmMiOjEsImNvbXBsZXRlIjp0cnVlLCJ0aXRsZSI6IkF0dGVuZCB0aGUgd2ViaW5hciBub3ciLCJzdHlsZV9sYXlvdXQiOiJjb2x1bW4yIiwiY2xlYWJpdFN0eWxlIjoiIiwidGl0bGVfc2l6ZSI6InAiLCJ0aXRsZV9hbGlnbiI6ImxlZnQifQ==) | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + ++---------------------------------+ +| Section Metadata | ++=========+=======================+ +| style | Two-up, resource-form | ++---------+-----------------------+ + +--- + ++-------------------------------------------------------------------------------+ +| Metadata | ++====================+==========================================================+ +| Title | Extending Content for Every Interaction | ++--------------------+----------------------------------------------------------+ +| robots | noodp | ++--------------------+----------------------------------------------------------+ +| Description | Join Adobe’s Mark Szulc and Anthony Milner as they lift | +| | the lid on how to make consistent, cross-channel | +| | experiences without sinking time into recreating content | +| | for each channel. | ++--------------------+----------------------------------------------------------+ +| keywords | Experience | +| | Cloud,Webinar,DXResources,Report,Report,Webinar | ++--------------------+----------------------------------------------------------+ +| serp-content-type | events | ++--------------------+----------------------------------------------------------+ +| pageCreatedAt | uk | ++--------------------+----------------------------------------------------------+ +| translated | false | ++--------------------+----------------------------------------------------------+ +| publishDate | 2022-05-11T13:31:52.129Z | ++--------------------+----------------------------------------------------------+ +| productJcrID | products:SG\_EXPERIENCEMANAGER | ++--------------------+----------------------------------------------------------+ +| primaryProductName | Experience Manager | ++--------------------+----------------------------------------------------------+ +| image | ![][image3] | ++--------------------+----------------------------------------------------------+ +| caas:content-type | webinar | ++--------------------+----------------------------------------------------------+ + ++-------------------------------------------------------------------------------+ +| Card Metadata | ++======================+========================================================+ +| title | Extending Content for Every Interaction | ++----------------------+--------------------------------------------------------+ +| CardDescription | | ++----------------------+--------------------------------------------------------+ +| cardDate | | ++----------------------+--------------------------------------------------------+ +| altCardImageText | Extending content for every interaction | ++----------------------+--------------------------------------------------------+ +| cardImage | ![][image3] | ++----------------------+--------------------------------------------------------+ +| original\_entity\_id | 4b456cdf-3909-38c7-bc3d-c1ece220b374 | ++----------------------+--------------------------------------------------------+ +| primaryTag | caas:content-type/webinar | ++----------------------+--------------------------------------------------------+ +| Tags | caas:collection/dxresources, caas:content-type/report, | +| | caas:content-type/report, caas:content-type/webinar, | +| | caas:content-type/webinar, | +| | caas:products/adobe-experience-cloud | ++----------------------+--------------------------------------------------------+ + +[image0]: https://main--bacom--adobecom.hlx.page/media_18704900b2616c6e2754b65449dd2691bb514cf3e.png#width=1400&height=450 + +[image1]: https://main--bacom--adobecom.hlx.page/media_1895b2eae1061d932ff95f8688bd5fc5f1d355e00.png#width=134&height=134 + +[image2]: https://main--bacom--adobecom.hlx.page/media_10a414597faab6528a54e9e97e73541d165152baf.png#width=134&height=134 + +[image3]: https://main--bacom--adobecom.hlx.page/media_1d89e2c666ac1bb1b04f19c5d1780ce5729027b3f.png#width=600&height=336 diff --git a/test/faas-variations/mock/au/resources/webinars/marketos-secrets-to-social-media-marketing.md b/test/faas-variations/mock/au/resources/webinars/marketos-secrets-to-social-media-marketing.md new file mode 100644 index 0000000..6fa8e33 --- /dev/null +++ b/test/faas-variations/mock/au/resources/webinars/marketos-secrets-to-social-media-marketing.md @@ -0,0 +1,113 @@ ++---------------------------+ +| breadcrumbs | ++===========================+ +| - [Home](/au) | +| - Adobe Resource Center | ++---------------------------+ + ++-------------------------------------------------------------+ +| marquee (small, light) | ++=============================================================+ +| \#f5f5f5 | ++-----------------------------------------------+-------------+ +| **WEBINAR** | ![][image0] | +| | | +| # Marketo's Secrets to Social Media Marketing | | ++-----------------------------------------------+-------------+ + +--- + ++-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Columns (contained) | ++==================================================================+============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ +| Curious to peek under the hood of Marketo’s social media | [Form as a Service - Offer Form for Marketo and Magento Migration to DTP (115) - Wednesday, 19 July 2023 at 14:02](https://milo.adobe.com/tools/faas#eyIxNDkiOiIiLCIxNzIiOiJQbGVhc2Ugc2hhcmUgc29tZSBjb250YWN0IGluZm9ybWF0aW9uIHRvIGRvd25sb2FkIHRoZSB3ZWJpbmFyLiIsImwiOiJlbl91cyIsImQiOiIvYXUvcmVzb3VyY2VzL3dlYmluYXJzL21hcmtldG9zLXNlY3JldHMtdG8tc29jaWFsLW1lZGlhLW1hcmtldGluZy90aGFuay15b3UuaHRtbCIsImFyIjp0cnVlLCJ0ZXN0IjpmYWxzZSwicSI6e30sInBjIjp7IjEiOiJqcyIsIjIiOiJmYWFzX3N1Ym1pc3Npb24iLCIzIjoic2ZkYyIsIjQiOiJkZW1hbmRiYXNlIiwiNSI6IiJ9LCJwIjp7ImpzIjp7IjM2IjoiNzAxNVkwMDAwMDQ3bXpnUUFBIiwiMzkiOiIiLCI3NyI6MSwiNzgiOjEsIjc5IjoxLCI5MCI6IkZBQVMiLCI5MiI6Mjg0NiwiOTMiOiIzMjA0IiwiOTQiOjMyMDB9fSwiYXMiOiJ0cnVlIiwibyI6e30sImUiOnt9LCJjb29raWUiOnsicCI6eyJqcyI6e319fSwidXJsIjp7InAiOnsianMiOnsiMzYiOiI3MDEzMDAwMDAwMGtZZTBBQUUifX19LCJvbmV0cnVzdF9hZHZlcnRpc2luZ19hY2NlcHRhbmNlIjoibm8iLCJvbmV0cnVzdF9wZXJmb3JtYW5jZV9hY2NlcHRhbmNlIjoibm8iLCJvbmV0cnVzdF9mdW5jdGlvbmFsaXR5X2FjY2VwdGFuY2UiOiJubyIsImNsZWFyYml0U3RlcCI6MSwiZm9ybVRhZyI6ImZhYXMtT2ZmZXIiLCJpZCI6IjExNSIsIl9mYyI6MSwiY29tcGxldGUiOmZhbHNlLCJ0aXRsZSI6IlBsZWFzZSBzaGFyZSBzb21lIGNvbnRhY3QgaW5mb3JtYXRpb24gdG8gZG93bmxvYWQgdGhlIHdlYmluYXIuIiwiY2xlYWJpdFN0eWxlIjoiIiwicGpzMzYiOiI3MDE1WTAwMDAwNDdtemdRQUEiLCJwanMzOSI6IiIsInBqczkyIjoyODQ2LCJwanM5MyI6IjMyMDQiLCJwanM5NCI6MzIwMCwicTEwMyI6W10sInBjMSI6ImpzIiwicGMyIjoiZmFhc19zdWJtaXNzaW9uIiwicGMzIjoic2ZkYyIsInBjNCI6ImRlbWFuZGJhc2UiLCJwYzUiOmZhbHNlfQ==) | +| marketing engine? Watch Lisa Marcyes, Sr. Social Media | | +| Marketing Manager, as she discusses the key elements to | | +| fueling a world class social media marketing strategy—from | | +| strategy, to content, to metrics. | | +| | | +| You’ll learn: | | +| | | +| - How to develop a winning social media marketing strategy | | +| - How to choose the right social platforms for your | | +| organization | | +| - The best ways to measure social media marketing to determine | | +| real business ROI | | +| | | +| Please share some contact information to download the | | +| webinar. | | ++------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + ++---------------------------------------------------+ +| **Section Metadata** | ++-----------+---------------------------------------+ +| style | container, xxl spacing, resource-form | ++-----------+---------------------------------------+ + +--- + +[Content as a Service - Friday, November 4, 2022 at 09:34](https://milo.adobe.com/tools/caas#eyJhbmFseXRpY3NUcmFja0ltcHJlc3Npb24iOmZhbHNlLCJhbmFseXRpY3NDb2xsZWN0aW9uTmFtZSI6IiIsImFuZExvZ2ljVGFncyI6W10sImJvb2ttYXJrSWNvblNlbGVjdCI6IiIsImJvb2ttYXJrSWNvblVuc2VsZWN0IjoiIiwiY2FyZFN0eWxlIjoiMToyIiwiY29sbGVjdGlvbkJ0blN0eWxlIjoicHJpbWFyeSIsImNvbnRhaW5lciI6IjEyMDBNYXhXaWR0aCIsImNvdW50cnkiOiJjYWFzOmNvdW50cnkvdXMiLCJjb250ZW50VHlwZVRhZ3MiOlsiY2Fhczpjb250ZW50LXR5cGUvZWJvb2siLCJjYWFzOmNvbnRlbnQtdHlwZS9ndWlkZSIsImNhYXM6Y29udGVudC10eXBlL3JlcG9ydCIsImNhYXM6Y29udGVudC10eXBlL3dlYmluYXIiLCJjYWFzOmNvbnRlbnQtdHlwZS93aGl0ZS1wYXBlciJdLCJkaXNhYmxlQmFubmVycyI6ZmFsc2UsImRyYWZ0RGIiOmZhbHNlLCJlbnZpcm9ubWVudCI6IiIsImVuZHBvaW50Ijoid3d3LmFkb2JlLmNvbS9jaGltZXJhLWFwaS9jb2xsZWN0aW9uIiwiZXhjbHVkZVRhZ3MiOlsiY2Fhczpjb250ZW50LXR5cGUvY3VzdG9tZXItc3RvcnkiXSwiZXhjbHVkZWRDYXJkcyI6W3siY29udGVudElkIjoiIn1dLCJmYWxsYmFja0VuZHBvaW50IjoiIiwiZmVhdHVyZWRDYXJkcyI6W10sImZpbHRlckV2ZW50IjoiIiwiZmlsdGVyTG9jYXRpb24iOiJ0b3AiLCJmaWx0ZXJMb2dpYyI6Im9yIiwiZmlsdGVycyI6W3siZmlsdGVyVGFnIjpbImNhYXM6cHJvZHVjdHMiXSwib3BlbmVkT25Mb2FkIjoiIiwiaWNvbiI6IiIsImV4Y2x1ZGVUYWdzIjpbXX0seyJmaWx0ZXJUYWciOlsiY2FhczppbmR1c3RyeSJdLCJvcGVuZWRPbkxvYWQiOiIiLCJpY29uIjoiIiwiZXhjbHVkZVRhZ3MiOltdfSx7ImZpbHRlclRhZyI6WyJjYWFzOnRvcGljIl0sIm9wZW5lZE9uTG9hZCI6IiIsImljb24iOiIiLCJleGNsdWRlVGFncyI6W119XSwiZmlsdGVyc1Nob3dFbXB0eSI6ZmFsc2UsImd1dHRlciI6IjR4IiwiaW5jbHVkZVRhZ3MiOltdLCJsYW5ndWFnZSI6ImNhYXM6bGFuZ3VhZ2UvZW4iLCJsYXlvdXRUeXBlIjoiM3VwIiwibG9hZE1vcmVCdG5TdHlsZSI6InByaW1hcnkiLCJvbmx5U2hvd0Jvb2ttYXJrZWRDYXJkcyI6ZmFsc2UsIm9yTG9naWNUYWdzIjpbXSwicGFnaW5hdGlvbkFuaW1hdGlvblN0eWxlIjoicGFnZWQiLCJwYWdpbmF0aW9uRW5hYmxlZCI6ZmFsc2UsInBhZ2luYXRpb25RdWFudGl0eVNob3duIjpmYWxzZSwicGFnaW5hdGlvblVzZVRoZW1lMyI6ZmFsc2UsInBhZ2luYXRpb25UeXBlIjoicGFnaW5hdG9yIiwicGxhY2Vob2xkZXJVcmwiOiIiLCJyZXN1bHRzUGVyUGFnZSI6IjMiLCJzZWFyY2hGaWVsZHMiOlsiY29udGVudEFyZWEuZGVzY3JpcHRpb24iXSwic2V0Q2FyZEJvcmRlcnMiOnRydWUsInNob3dCb29rbWFya3NGaWx0ZXIiOmZhbHNlLCJzaG93Qm9va21hcmtzT25DYXJkcyI6ZmFsc2UsInNob3dGaWx0ZXJzIjpmYWxzZSwic2hvd1NlYXJjaCI6ZmFsc2UsInNob3dUb3RhbFJlc3VsdHMiOmZhbHNlLCJzb3J0RGVmYXVsdCI6InJhbmRvbSIsInNvcnRFbmFibGVQb3B1cCI6ZmFsc2UsInNvcnRFbmFibGVSYW5kb21TYW1wbGluZyI6ZmFs) + ++-----------------------------+ +| Section Metadata | ++=========+===================+ +| style | L spacing, center | ++---------+-------------------+ + ++-------------------------------------------------------------------------------+ +| Metadata | ++====================+==========================================================+ +| Title | Marketo's Secrets to Social Media Marketing | ++--------------------+----------------------------------------------------------+ +| robots | noodp | ++--------------------+----------------------------------------------------------+ +| Description | Curious to peek under the hood of Marketo’s social media | +| | marketing engine? Watch Lisa Marcyes, Sr. Social Media | +| | Marketing Manager, as she discusses the key elements to | +| | fueling a world class social media marketing | +| | strategy—from strategy, to content, to metrics. | ++--------------------+----------------------------------------------------------+ +| keywords | Marketing Automation,Experience Cloud,Webinar,Marketo | +| | Engage,Marketing Automation,Webinar,DXResources,Marketo | +| | Engage | ++--------------------+----------------------------------------------------------+ +| serp-content-type | product | ++--------------------+----------------------------------------------------------+ +| pageCreatedAt | en | ++--------------------+----------------------------------------------------------+ +| translated | false | ++--------------------+----------------------------------------------------------+ +| publishDate | 2023-02-09T14:49:35.866Z | ++--------------------+----------------------------------------------------------+ +| productJcrID | products:SG\_MARKETO\_ENGAGE | ++--------------------+----------------------------------------------------------+ +| primaryProductName | Marketo Engage | ++--------------------+----------------------------------------------------------+ +| image | ![][image1] | ++--------------------+----------------------------------------------------------+ +| caas:content-type | webinar | ++--------------------+----------------------------------------------------------+ + ++-----------------------------------------------------------------+ +| Card Metadata | ++=================+===============================================+ +| cardTitle | Marketo's Secrets to Social Media Marketing | ++-----------------+-----------------------------------------------+ +| cardImagePath | ![][image1] | ++-----------------+-----------------------------------------------+ +| CardDescription | | ++-----------------+-----------------------------------------------+ +| primaryTag | caas:content-type/webinar | ++-----------------+-----------------------------------------------+ +| Tags | caas:products/marketo-engage-bizible, | +| | caas:business-unit/experience-cloud, | +| | caas:topic/marketing-automation, | +| | caas:collection/dxresources, | +| | caas:topic/marketing-automation, | +| | caas:products/marketo-engage-bizible, | +| | caas:content-type/webinar, caas:cta/watch-now | ++-----------------+-----------------------------------------------+ + +[image0]: https://main--bacom--adobecom.hlx.page/media_14adb8b2dde3a4952fbf01f055c53daaf330d9b9a.png#width=600&height=300 + +[image1]: https://main--bacom--adobecom.hlx.page/media_1d9a492ae9cdb3159e1d591bac5ab8cf01fb18d6d.png#width=600&height=300 diff --git a/test/faas-variations/mock/au/resources/webinars/winning-strategies-for-b2b-ecommerce-in-2023.md b/test/faas-variations/mock/au/resources/webinars/winning-strategies-for-b2b-ecommerce-in-2023.md new file mode 100644 index 0000000..9b0e1ff --- /dev/null +++ b/test/faas-variations/mock/au/resources/webinars/winning-strategies-for-b2b-ecommerce-in-2023.md @@ -0,0 +1,183 @@ ++-------------------------------------+ +| breadcrumbs | ++=====================================+ +| - [Home](http://business.adobe.com) | +| - Adobe Resource Center | ++-------------------------------------+ + ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| marquee (small, light) | ++=========================================================================================================================================================================+ +| ![][image0] | ++-----------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+ +| Adobe Digital Leaders Presents | ![][image1] | +| | | +| # Winning strategies for B2B ecommerce in 2023 | | +| | | +| **Price:** FREE | | +| | | +| **Length:** 59 min | | +| | | +| Listen to a data-based discussion with Perficient, Gorilla Group, and Dotdigital on the top growth priorities for 150 B2B sellers this year. | | +| | | +| **[Register for free](https://main--bacom--adobecom.hlx.page/au/fragments/resources/modal/forms/winning-strategies-for-b2b-ecommerce-in-2023#faas-form)** | | ++-----------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+ + ++-------------------+ +| Text (l-spacing) | ++===================+ +| ## Event speakers | ++-------------------+ + +--- + ++--------------------------------------------------------------------------------------------------------------------+ +| Event Speakers | ++=====================================+======================================+=======================================+ +| ![Speaker - Karie Daudt][image2] | **Karie Daudt** | Karie Daudt has more than two decades | +| | | of experience in digital commerce, | +| | Director of Commerce Strategy\ | management, and business development | +| | Perficient | in the manufacturing and... | ++-------------------------------------+--------------------------------------+---------------------------------------+ +| ![Speaker - Lisa Berry][image3] | **Lisa Berry** | Lisa Berry is experienced in IT | +| | | eCommerce selling and buying | +| | Senior Business Strategy Analyst\ | environments in the Private Sector | +| | Gorilla Group | and in IT eServices and... | ++-------------------------------------+--------------------------------------+---------------------------------------+ +| ![Speaker - Alison Murtagh][image4] | **Alison Murtagh** | Alison Murtagh is a Strategic Partner | +| | | Marketing Manager at Dotdigital. She | +| | Strategic Partner Marketing Manager\ | has more than... | +| | Dotdigital | | ++-------------------------------------+--------------------------------------+---------------------------------------+ +| ![Speaker - Shannon Hane][image5] | **Shannon Hane** | Shannon Hane is a Senior Product | +| | | Marketing Manager for Adobe. She | +| | Senior Product Marketing Manager\ | leads a team responsible for Adobe | +| | Adobe | Commerce go-to-market strategies, | +| | | sales enablement, and... | ++-------------------------------------+--------------------------------------+---------------------------------------+ + ++------------------------------------------------------------------------------------+ +| Text (vertical) | ++====================================================================================+ +| \#f5f5f5 | ++------------------------------------------------------------------------------------+ +| ## Related products | +| | +| [Adobe Commerce](http://business.adobe.com/products/magento/magento-commerce.html) | ++------------------------------------------------------------------------------------+ + ++------------------+ +| Section Metadata | ++=========+========+ +| style | Two-up | ++---------+--------+ + +--- + +## Recommended for you + + + ++---------------------------------------------------------------------------+ +| **text (full-width, no spacing)** | ++---------------------------------------------------------------------------+ +| **_[See all resources](https://business.adobe.com/resources/main.html)_** | ++---------------------------------------------------------------------------+ + ++-----------------------------+ +| Section Metadata | ++=========+===================+ +| style | L spacing, center | ++---------+-------------------+ + +--- + + + ++---------------------------------------------------------------------------+ +| Metadata | ++====================+======================================================+ +| Title | Winning strategies for B2B ecommerce in 2023 | ++--------------------+------------------------------------------------------+ +| robots | noodp | ++--------------------+------------------------------------------------------+ +| Description | Listen to a data-based discussion with Perficient, | +| | Gorilla Group, and Dotdigital on the top growth | +| | priorities for 150 B2B sellers this year. | ++--------------------+------------------------------------------------------+ +| keywords | Webinar,Commerce,DXResources,Adobe Commerce,Commerce | ++--------------------+------------------------------------------------------+ +| serp-content-type | events | ++--------------------+------------------------------------------------------+ +| pageCreatedAt | en | ++--------------------+------------------------------------------------------+ +| translated | false | ++--------------------+------------------------------------------------------+ +| publishDate | 2023-06-15T11:06:41.815Z | ++--------------------+------------------------------------------------------+ +| productJcrID | products:SG\_EXPERIENCEMANAGER | ++--------------------+------------------------------------------------------+ +| primaryProductName | Experience Manager | ++--------------------+------------------------------------------------------+ +| image | ![][image6] | ++--------------------+------------------------------------------------------+ +| caas:content-type | webinar | ++--------------------+------------------------------------------------------+ + ++---------------------------------------------------------------------+ +| Card Metadata | ++======================+==============================================+ +| title | Winning strategies for B2B ecommerce in 2023 | ++----------------------+----------------------------------------------+ +| CardDescription | | ++----------------------+----------------------------------------------+ +| cardDate | 2023-04-03 | ++----------------------+----------------------------------------------+ +| altCardImageText | | ++----------------------+----------------------------------------------+ +| cardImage | ![][image6] | ++----------------------+----------------------------------------------+ +| original\_entity\_id | ba6d5935-82a4-361f-8053-868410a1c58c | ++----------------------+----------------------------------------------+ +| primaryTag | caas:content-type/webinar | ++----------------------+----------------------------------------------+ +| Tags | caas:industry/financial-services, | +| | | +| | caas:industry/manufacturing, | +| | | +| | caas:industry/high-tech, | +| | | +| | caas:industry/food-and-beverage, | +| | | +| | caas:industry/technology-software-services, | +| | | +| | caas:products/adobe-commerce-cloud, | +| | | +| | caas:products/magento-commerce, | +| | | +| | caas:products/adobe-commerce, | +| | | +| | caas:topic/commerce, | +| | | +| | caas:topic/digital-transformation, | +| | | +| | caas:topic/business-impact, | +| | | +| | caas:content-type/webinar, | +| | | +| | caas:content-type/video | ++----------------------+----------------------------------------------+ + +[image0]: https://main--bacom--adobecom.hlx.page/media_11e2838a5d0bdcee2b817ed3dc1696fc3d783e2a1.png#width=1920&height=747 + +[image1]: https://main--bacom--adobecom.hlx.page/media_114eb1c009abb8c5258bbce304c3f21d109d500e7.png#width=960&height=480 + +[image2]: https://main--bacom--adobecom.hlx.page/media_17ad3a5f436147525fdc897e19d40aa73e7fc09e7.png#width=400&height=400 + +[image3]: https://main--bacom--adobecom.hlx.page/media_1c0115d57908c0cf63e481f549723473be6f5ba56.png#width=400&height=400 + +[image4]: https://main--bacom--adobecom.hlx.page/media_1a4d6cf5505fbd4ce73b3c960b3aedf4c86bc28f3.png#width=400&height=400 + +[image5]: https://main--bacom--adobecom.hlx.page/media_1c3199ddb68d70cb46b98e3097b3184157c6c7907.png#width=223&height=223 + +[image6]: https://main--bacom--adobecom.hlx.page/media_14fa267347803ce38d40e60cdd9b6fc467107e817.jpeg#width=1512&height=852