// Menu: Currency Converter using google// Author: Jakub Olek// Twitter: @JakubOlek/** @type {import("@johnlindquist/kit")} */const from = await arg("from", ["pln", "usd", "eur"]);const to = await arg("to", ["usd", "pln", "eur"]);const query = await arg("amount");const value = await scrapeSelector(`https://google.com/search?q=${encodeURIComponent(query + " " + from + " " + to)}`,"span[data-value]");div(query + " " + from + " = " + value + " " + to, "p-4");
// Menu: RCKIK mobile// Description: Show filtered plan of mobile RCKIK busses// Author: Jakub Olek// Twitter: @JakubOlek/** @type {import("@johnlindquist/kit")} */function transform(node) {// Edit that to filter locations that you're interested in// has to be inside transform function - as it's being serialized and passed to browserconst filter = "Poznań";const columns = [...node.querySelectorAll("td")];if (columns[3].innerHTML.startsWith(filter)) {return (columns[0].querySelector("a").innerHTML +" " +columns[3].innerHTML +" " +columns[2].innerHTML);}}const pagination = await scrapeSelector("https://www.rckik.poznan.pl/najblizsze-wyjazdy?page=1",".pagination li");const numberOfPages = pagination.length;let t = [];for (let i = 1; i <= numberOfPages; i += 1) {const result = await scrapeSelector(`https://www.rckik.poznan.pl/najblizsze-wyjazdy?page=${i}`,"#calendarTable tr:not(.header):not(.canceled)",transform);t = t.concat(result);}div(`<ul>${t.filter(Boolean).map((date) => `<li>${date}</li>`).join("")}</ul>`,"p-4");
// Menu: Weather by yr.no// Author: Jakub Olek// Twitter: @JakubOlek/** @type {import("@johnlindquist/kit")} *//*** 1. Open https://www.yr.no/* 2. Find your location* 3. Copy what comes AFTER https://www.yr.no/en/forecast/daily-table/ to location const*/const location = "5-1233000/Poland/Poznan";div(`<iframe src="https://www.yr.no/en/print/forecast/${location}#toolbar=0" height=800 width=600/>`,"p-2");