Summarize Target Invoice
当前为
// ==UserScript==
// @name Target Invoice Summary
// @namespace Violentmonkey Scripts
// @match https://www.target.com/orders/*/invoices/*
// @grant none
// @version 1.0
// @author nikhilweee
// @description Summarize Target Invoice
// ==/UserScript==
function allElementsLoaded() {
const detailsCards = document.querySelectorAll('[data-test="invoice-details-card"]');
return detailsCards.length > 0;
}
function runScriptWhenReady() {
if (allElementsLoaded()) {
const detailsCards = document.querySelectorAll('[data-test="invoice-details-card"]');
const table = document.createElement('table');
let totalQuantity = 0;
table.style = "width: 100%; text-align: left;";
table.innerHTML = '<th>Price</th><th>Item</th>';
detailsCards.forEach(card => {
const boldElements = Array.from(card.querySelectorAll('b'));
const [itemName, quantity, , , , , , itemPrice] = boldElements.map(el => el?.textContent.trim() || '');
const [_, itemNameShort] = itemName.split(" - ");
totalQuantity += parseInt(quantity);
const row = table.insertRow();
row.innerHTML = `<td>${itemPrice}</td><td>(${quantity}) ${itemNameShort}</td>`;
});
const invoiceTotal = document.querySelector("div.h-text-lg p")?.textContent.trim() || '';
const invoiceRow = table.insertRow();
invoiceRow.innerHTML = `<th>${invoiceTotal}</th><th>(${totalQuantity}) Total</th>`;
const invoiceMetaElement = document.querySelector('[data-test="invoice-meta"]');
invoiceMetaElement.insertAdjacentElement('afterend', table);
} else {
setTimeout(runScriptWhenReady, 100);
}
}
window.addEventListener('load', runScriptWhenReady);