diff --git a/tools/pdp-scanner/pdp-scanner.js b/tools/pdp-scanner/pdp-scanner.js index e29f2906..3196579c 100644 --- a/tools/pdp-scanner/pdp-scanner.js +++ b/tools/pdp-scanner/pdp-scanner.js @@ -9,7 +9,7 @@ async function corsFetch(url, cache = false, reload = false) { return resp; } -async function logResult(result, config) { +async function logResult(result, config, focus) { const checkSame = (prop) => { if (result.prod[prop] === undefined && result.new[prop] === undefined) { return { same: true, value: '' }; @@ -24,6 +24,21 @@ async function logResult(result, config) { New: result.new.url, }; + if (focus === 'prod-export') { + const row = document.createElement('tr'); + row.innerHTML = ` + ${result.prod.url} + ${result.prod.status} + `; + config.forEach((item) => { + const td = document.createElement('td'); + td.innerHTML = result.prod[item.Field]; + row.appendChild(td); + }); + resultsTable.appendChild(row); + return; + } + const createImage = async (url) => { const toHumanReadableAgo = (date) => { if (!date) return 'never'; @@ -100,7 +115,7 @@ async function logResult(result, config) { resultsTable.appendChild(row); } -function extractData(prodDoc, _newDoc, JSONLDData, config, result) { +function extractData(prodDoc, _newDoc, JSONLDData, config, result, focus) { const findSwatches = (scripts) => { for (let i = 0; i < scripts.length; i += 1) { const script = scripts[i]; @@ -137,14 +152,28 @@ function extractData(prodDoc, _newDoc, JSONLDData, config, result) { break; } case 'productid': { + console.log('productid', item.QuerySelector); const prodElem = prodDoc.querySelector(item.QuerySelector); result.prod.productId = prodElem ? prodElem.textContent : undefined; - result.new.productId = result.prod.productid; + result.new.productId = result.prod.productId; + result.prod.productid = result.prod.productId; + result.new.productid = result.prod.productId; break; } case 'warranty': { const prodElem = prodDoc.querySelector(item.QuerySelector); - if (prodElem) prodElem.querySelectorAll('style').forEach((style) => style.remove()); + if (prodElem) { + prodElem.querySelectorAll('style').forEach((style) => style.remove()); + if (focus === 'prod-export') { + const heading = prodElem.querySelector('h2'); + const ps = [...prodElem.querySelectorAll('p')]; + let sanitizedHTML = ''; + if (heading) sanitizedHTML += `${heading.textContent}
`; + if (ps.length > 0) sanitizedHTML += `${ps.map((p) => p.innerHTML).join('
')}`; + result.prod.warranty = sanitizedHTML; + break; + } + } result.prod.warranty = prodElem ? prodElem.textContent.trim() : undefined; result.new.warranty = JSONLDData.custom?.options?.[0]?.name; break; @@ -210,7 +239,7 @@ function mapResultValues(result, config) { }); } -async function scanPDP(row, config, reload = false) { +async function scanPDP(row, config, focus, reload = false) { console.log(row.Prod, row.New); const prodUrl = row.Prod; const newUrl = row.New; @@ -241,9 +270,11 @@ async function scanPDP(row, config, reload = false) { JSONLDData = JSON.parse(JSONLD.textContent); } - extractData(prodDoc, newDoc, JSONLDData, config, result); - await processAuxRequests(config, result); - mapResultValues(result, config); + extractData(prodDoc, newDoc, JSONLDData, config, result, focus); + if (!focus) { + await processAuxRequests(config, result); + mapResultValues(result, config); + } return result; } @@ -275,7 +306,7 @@ async function runScan(url, focus, share) { urls = json.data; } - if (focus) { + if (focus === 'images') { config = []; } @@ -300,13 +331,15 @@ async function runScan(url, focus, share) { tableHead.appendChild(th); }); - const thProd = document.createElement('th'); - thProd.textContent = 'Prod Screenshot'; - tableHead.appendChild(thProd); + if (focus !== 'prod-export') { + const thProd = document.createElement('th'); + thProd.textContent = 'Prod Screenshot'; + tableHead.appendChild(thProd); - const thNew = document.createElement('th'); - thNew.textContent = 'New Screenshot'; - tableHead.appendChild(thNew); + const thNew = document.createElement('th'); + thNew.textContent = 'New Screenshot'; + tableHead.appendChild(thNew); + } const params = new URLSearchParams(window.location.search); const limit = +params.get('limit') || urls.length; @@ -315,11 +348,11 @@ async function runScan(url, focus, share) { for (let i = 0; i < limit; i += 1) { const row = urls[i]; // eslint-disable-next-line no-await-in-loop - const result = await scanPDP(row, config); + const result = await scanPDP(row, config, focus); result.prod.url = row.Prod; result.new.url = row.New; // eslint-disable-next-line no-await-in-loop - await logResult(result, config); + await logResult(result, config, focus); } }