// ==UserScript== // @name Bazaar Helper // @namespace https://jotde.eu // @updateURL https://gitea.jotde.be/jens/tornjs/raw/branch/master/bazaar.user.js // @downloadURL https://gitea.jotde.be/jens/tornjs/raw/branch/master/bazaar.user.js // @version 0.6 // @description try to take over the world! // @author JotDe: // @match https://www.torn.com/bazaar.php* // @grant GM.xmlHttpRequest // ==/UserScript== const callMarketApi = new Promise((resolve, reject) => { GM.xmlHttpRequest({ method: "GET", url: "http://jotde.eu/api/market", onload: function (response) { if (response.status != 200) { reject( `HTTP Status ${response.status} ${response.statusText}: ${response.responseText}` ); } resolve(JSON.parse(response.responseText)); }, }); }); async function forElement(element) { while (!document.querySelector(element)) { await new Promise((resolve) => setTimeout(resolve, 500)); } } async function changePlaceholder(marketItems) { let itemList = document.querySelectorAll('div[class="category-wrap"] ul[class^="items-cont"] li'); itemList.forEach((item) => { const itemid = item.querySelector("img").getAttribute("src").split("/")[3]; const marketItem = marketItems[itemid]; if (marketItem) { item .querySelector('div[class="amount"] input[type="text"]') .setAttribute("placeholder", marketItem["count"]); item .querySelector( 'div[class="price"] div[class^="input-money-group"] input[type="text"]' ) .setAttribute("placeholder", marketItem["avg"]); } }); } async function writeErrorOnConsole(error) { console.log(error); } async function run() { await forElement('ul[class^="items-cont"][style="display:block;"]'); callMarketApi.then(changePlaceholder, writeErrorOnConsole); } run();