Show points on Amazon.co.jp wishlist

Amazon.co.jpの欲しいものリストにポイントを表示

目前為 2018-01-07 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Show points on Amazon.co.jp wishlist
// @namespace    https://gf.qytechs.cn/ja/users/165645-agn5e3
// @version      1.4.2
// @description  Amazon.co.jpの欲しいものリストにポイントを表示
// @author       agn5e3
// @license      Apache-2.0
// @match        https://www.amazon.co.jp/*/wishlist/*
// ==/UserScript==
(function() {
	'use strict';
	const domParser = new DOMParser();
	const observer = new MutationObserver((records) => {
		for (const record of records) {
			for (const node of record.addedNodes) {
				displayPoint(node);
			}
		}
	});
	const modifyCharacter = ((str) => str.replace(/[\s]+/g, '').replace(/(/, '(')
		.replace(/)/, ')').replace(/:/, ':').replace(/の割引/, '円').replace(/\(/, ' (')
	);
	const setColor = ((str) => {
		let ratio = str.match(/[0-9]+%/);
		if (ratio === null) {
			ratio = 0;
		} else {
			ratio = parseInt(ratio);
		}
		let color;
		if (ratio < 25) {
			color = '#111';
		} else if (ratio < 50) {
			color = '#f60';
		} else if (ratio < 75) {
			color = '#f0f';
		} else {
			color = '#f00';
		}
		return '<p style="margin:0;color:' + color + '">' + str + '</p>';
	});
	const displayPoint = ((node) => {
		if (node.querySelectorAll && node.getElementsByClassName('fetched')[0] ===
			undefined && node.querySelector('div[id^="item_"]') !== null && /Kindle/.test(
				node.innerText)) {
			node.getElementsByTagName('div')[0].classList.add('fetched');
			const priceSection = node.getElementsByClassName('price-section')[0];
			const asin = JSON.parse(priceSection.attributes["data-item-prime-info"].value)
				.asin;
			node.getElementsByClassName('a-price-symbol')[0].textContent = '>';
			fetch('https://www.amazon.co.jp/dp/' + asin, {
				credentials: 'include'
			}).then((response) => {
				if (!response.ok) {
					throw Error(response.statusText);
				}
				return response.text();
			}).then((text) => {
				const html = domParser.parseFromString(text, 'text/html');
				const printPrice = html.getElementsByClassName('print-list-price')[0];
				const kindleSave = html.getElementsByClassName('ebooks-price-savings')[
					0];
				const loyaltyPoint = html.getElementsByClassName('loyalty-points')[0];
				if (printPrice !== undefined) priceSection.insertAdjacentHTML(
					'afterbegin', setColor(modifyCharacter(printPrice.innerText)));
				if (kindleSave !== undefined) priceSection.insertAdjacentHTML(
					'beforeend', setColor('割引:' + modifyCharacter(kindleSave.innerText).replace(
						/¥/, '')));
				if (loyaltyPoint !== undefined) priceSection.insertAdjacentHTML(
					'beforeend', setColor(modifyCharacter(loyaltyPoint.innerText)));
				node.getElementsByClassName('a-price-symbol')[0].remove();
				node.getElementsByClassName('itemAvailability')[0].remove();
				node.getElementsByClassName('a-price-whole')[0].insertAdjacentHTML(
					'afterbegin', '¥');
				node.getElementsByClassName('a-price')[0].classList.add(
					'a-color-price', 'a-size-large');
			}).catch((error) => console.error(error));
		}
	});
	const main = ((node) => {
		for (const node of document.getElementsByClassName('g-item-sortable')) {
			displayPoint(node);
		}
		observer.observe(document.getElementById('g-items'), {
			childList: true,
			subtree: true,
		});
	});
	fetch('https://www.amazon.co.jp/gp/product/black-curtain-redirect.html', {
		credentials: 'include'
	}).then(() => main());
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址