// ==UserScript== // @name Bazar minimalne ceny // @namespace http://tampermonkey.net/ // @version 0.6.1 // @description Zapamiętuje w local storage najniższe ceny gier z listy życzeń i pokazuje je obok aktualnie najniższej ceny. Jeśli aktualna cena jest mniejsza od dotychczas zapisanej, wtedy tytuł oznaczany jest na zielono, jeśli cena jest równa naniższej - na niebiesko. // @author nochalon // @match https://bazar.lowcygier.pl/ // @match https://bazar.lowcygier.pl/?* // @icon https://bazar.lowcygier.pl/favicon.ico // @grant GM_registerMenuCommand // @downloadURL none // ==/UserScript== (function() { 'use strict'; GM_registerMenuCommand('Usuń całą historię', () => { if (confirm( "Aktualnie zapisanych jest " + localStorage.length + " tytułów. Czy chcesz je wszystkie usunąć?")) { localStorage.clear(); } }); GM_registerMenuCommand('Usuń historię tytułu', () => { var title = prompt( "Podaj tytuł gry której historię chcesz usunąć"); if (title != null) { if (!removeFromLocalStorage(title)) { alert("Nie znaleziono tytułu o nazwie: " + title); } } }); var ths = document.querySelectorAll(".row.game-list.wishlist-item"); console.log("Local storage contains " + localStorage.length + " items"); for (var i = 0; i < ths.length; i++) { var titleElem = ths[i].querySelector(".media-heading > a"); var title = titleElem.innerHTML; var priceElem = ths[i].querySelector(".pc > p.prc"); var price = priceElem.innerHTML; var priceFloat = parseFloat(price.replace(',', '.')); var inStorage = JSON.parse(localStorage.getItem(title)); if (inStorage === null || inStorage.price > priceFloat) { console.log("Replacing " + title + " " + inStorage + " with " + priceFloat); saveToLocalStorage(title, priceFloat); if (inStorage === null) continue; } var diff = inStorage.price - priceFloat; if (diff > 0) { titleElem.style.color = '#00E000'; priceElem.style.color = '#00E000'; appendStoredPrice(inStorage.price, diff, priceElem.parentNode); } else if (diff < 0) { appendStoredPrice(inStorage.price, diff, priceElem.parentNode); appendTime(inStorage.timestamp, priceElem.parentNode); } else { titleElem.style.color = '#0000E0'; priceElem.style.color = '#0000E0'; appendTime(inStorage.timestamp, priceElem.parentNode); } } })(); function appendTime(timeVal, elem) { var time = document.createElement("time"); var timeString = new Date(timeVal).toISOString(); time.innerHTML = timeString; time.dateTime = timeString; time.classList = "timeago"; elem.appendChild(time); jQuery(time).timeago(); } function appendStoredPrice(price, diff, elem) { var priceElem = document.createElement("p"); var val = diff/price*100.0; priceElem.innerHTML = "" + parseFloat(price).toFixed(2) + "zł (" + (val > 0.0 ? "+" : "") + val.toFixed(2) + "%)"; elem.appendChild(priceElem); } function saveToLocalStorage(title, price) { var newItem = {'price': price, 'timestamp': Date.now()}; localStorage.setItem(title, JSON.stringify(newItem)); } function removeFromLocalStorage(key) { var keyLowerCase = key.toLowerCase(); for (var a in localStorage) { if (a.toLowerCase() === keyLowerCase) { localStorage.removeItem(a); return true; } } return false; }