Greasy Fork is available in English.
Lägger till knappar med BB-Kod på produktsidor och listor
// ==UserScript== // @name Prisjakt BB-Kod // @namespace OTzyVGxCfaZOhDmNIFa1 // @author LemonIllusion // @version 1.5.4 // @match https://www.prisjakt.nu/* // @description Lägger till knappar med BB-Kod på produktsidor och listor // ==/UserScript== // Definiera variabler var currURL = window.location.href; // Nuvarande sidas URL // Produktklass class Product { constructor(name, id, category = false, price = false, retailLink = false, retailer = false) { this.name = name; this.id = id; this.category = category; this.price = price; this.retailLink = retailLink; this.retailer = retailer; } getLink() { return '[url="https://www.prisjakt.nu/produkt.php?p=' + this.id + '"][b]' + this.name + "[/b][/url]"; } getImage() { return '[url="https://www.prisjakt.nu/produkt.php?p=' + this.id + '"][img]https://cdn.pji.nu/product/standard/280/' + this.id + ".jpg[/img][/url]"; } getBoth() { return '[url="https://www.prisjakt.nu/produkt.php?p=' + this.id + '"][b]' + this.name + "[/b]\n[img]https://cdn.pji.nu/product/standard/280/" + this.id + ".jpg[/img][/url]"; } getTableRow(showCat = true) { var result = "[tr]"; if (showCat && this.category) { result += '[td valign="middle"][b]' + this.category + "[/b][/td]"; } result += '[td valign="middle"][center][url="https://www.prisjakt.nu/produkt.php?p=' + this.id + '"][img static]https://cdn.pji.nu/product/standard/50/' + this.id + ".jpg[/img][/url][/center][/td]"; result += '[td valign="middle"][url="https://www.prisjakt.nu/produkt.php?p=' + this.id + '"]' + this.name + "[/url][/td]"; if (this.retailLink && this.price && !this.retailer) { result += '[td valign="middle"][url="' + this.retailLink +'"]' + intFormat(this.price) + "[/url][/td]"; } else { if (this.price) { result += '[td valign="middle"]' + intFormat(this.price) + "[/td]"; } if (this.retailLink && this.retailer) { result += '[td valign="middle"][url="' + this.retailLink + '"]' + this.retailer + "[/url][/td]"; } else if (this.retailLink) { result += '[td valign="middle"][url="' + this.retailLink + '"]Butik[/url][/td]'; } else if (this.retailer) { result += '[td valign="middle"]' + this.retailer + "[/td]"; } } result += "[/tr]"; return result; } } // Definiera funktioner function copyPopup(text) { var textarea = document.createElement("textarea"); textarea.id = "copyPopup"; textarea.spellcheck = false; textarea.innerHTML = text; textarea.style.cssText = "width: 50%; height: 50%; position: fixed; top: 25%; left: 25%; box-shadow: 0px 0px 0px 2000px rgba(0,0,0,0.6);"; document.body.appendChild(textarea); textarea.select(); setTimeout(function(){ window.addEventListener("click", closePopup); }, 0); } function closePopup(e) { var textarea = document.querySelector("body>#copyPopup"); if (e.target != textarea) { window.removeEventListener("click", closePopup); document.body.removeChild(textarea); } } function createButton(buttonText, clickAction, css = "", insertBefore = document.querySelector("#page_header .fr")) { // Funktion för att skapa en knapp var input = document.createElement("button"); input.className = "btn product"; input.innerHTML = buttonText; input.onclick = clickAction; input.style.cssText = "border-radius: 4px 4px 0 0; padding-bottom: 2px;"+css; insertBefore.parentNode.insertBefore(input, insertBefore); } function intFormat(integer) { return integer.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ") + " :-"; // spaces are nbsp } function tablify(products, showCat = true, showSum = true) { var len = products.length; showSum = showSum && !!products[0].price; var sum = 0; table = "[table]"; for (var i = 0; i < len; i++) { table += products[i].getTableRow(showCat); if (showSum) { sum += products[i].price; } } if (showSum) { table += "[tr][td][/td][td][/td][td][right][b]Summa:[/b][/right][/td][td]" + intFormat(sum) + "[/td][/tr]"; } table += "[/table]"; //console.log(table); //---------------------------------------------------DEBUG--DEBUG--DEBUG--DEBUG--DEBUG--DEBUG--DEBUG--DEBUG--DEBUG--DEBUG--DEBUG--DEBUG--DEBUG--DEBUG--DEBUG--DEBUG--DEBUG----------------------------- return table; } // Gör saker if (currURL.split("?")[0] == "https://www.prisjakt.nu/produkt.php" && currURL.split("?")[1][0] != "j") { // Om nuvarande sida är en produktsida var product = new Product( document.getElementsByClassName("intro_header")[0].innerHTML, // namn document.getElementById("share_btn_top").getAttribute("data-page-item-id") // id ); createButton("BB-Kod Länk", function(){ copyPopup(product.getLink()); }, "margin-left:31px"); createButton("BB-Kod Bild", function(){ copyPopup(product.getImage()); }, "margin-left:6px"); createButton("BB-Kod Länk och Bild", function(){ copyPopup(product.getBoth()); }, "margin-left:6px"); } else if (currURL.split("?")[0] == "https://www.prisjakt.nu/list.php" || currURL.substring(0, 38) == "https://www.prisjakt.nu/produkt.php?j=" && currURL.split("https://www.prisjakt.nu/produkt.php?j=")[1] !== "") { // Om nuvarande sida är en lista eller jämförelse innehållandes produkter var products = []; var catPossible = true; if (currURL.substring(0, 38) == "https://www.prisjakt.nu/produkt.php?j=") { // Om sidan är en jämförelse var loopList = document.getElementById("div_produktegenskaper_jmf").getElementsByTagName("tr")[0].getElementsByTagName("th"); for (i = 1; i < loopList.length; i++) { // Börja på ett för att första rutan inte innehåller någon produkt products.push(new Product( loopList[i].getElementsByTagName("h3")[0].getElementsByTagName("a")[0].innerHTML, // namn loopList[i].getElementsByTagName("h3")[0].innerHTML.split('<a href="/produkt.php?p=')[1].split('"')[0].split("&")[0], // id loopList[i].getElementsByClassName("category-name")[0].getElementsByTagName("a")[0].innerHTML // kategori )); } } else { // Om sidan är en lista if (document.getElementById("listviewpage-currentcontentheader").getElementsByClassName("sidebar-btn-delete")[0] !== undefined) { var owner = true; } else { var owner = false; } if (currURL.split("view=")[1] === undefined || currURL.split("view=")[1][0] == "l") { // Om view=l, lista, eller view inte är specificerad var loopList = document.getElementById("listviewpage-currentlistview").getElementsByClassName("list-row"); if (owner) { for (i = 0; i < loopList.length; i++) { products.push(new Product( loopList[i].getElementsByClassName("span9-5")[0].getElementsByTagName("a")[0].innerHTML, // namn loopList[i].getElementsByClassName("span9-5")[0].innerHTML.split('<a href="/produkt.php?p=')[1].split('"')[0].split("&")[0], // id loopList[i].getElementsByClassName("muted")[0].getElementsByTagName("a")[0].innerHTML // kategori )); } } else { for (i = 0; i < loopList.length; i++) { products.push(new Product( loopList[i].getElementsByClassName("prod")[0].innerHTML, // namn loopList[i].getElementsByClassName("prod")[0].href.split('/produkt.php?p=')[1].split('"')[0].split("&")[0], // id loopList[i].getElementsByClassName("span4")[0].innerHTML.slice(1, -1) // \n som första och sista tecken... // kategori )); } } } else if (currURL.split("view=")[1][0] == "m" && owner) { // Om view=m, lista med bilder och listan är egenägd var loopList = document.getElementById("listviewpage-currentlistview").getElementsByClassName("list-row"); for (i = 0; i < loopList.length; i++) { products.push(new Product( loopList[i].getElementsByTagName("h4")[0].getElementsByTagName("a")[0].innerHTML, // namn loopList[i].getElementsByTagName("h4")[0].innerHTML.split('<a href="/produkt.php?p=')[1].split('"')[0].split("&")[0], // id loopList[i].getElementsByClassName("muted")[0].getElementsByTagName("a")[0].innerHTML // kategori )); } } else if (currURL.split("view=")[1][0] == "m" && !owner) { // Om view=m, lista med bilder och listan _inte_ är egenägd var loopList = document.getElementById("listviewpage-currentlistview").getElementsByClassName("list-row"); for (i = 0; i < loopList.length; i++) { products.push(new Product( loopList[i].getElementsByTagName("h4")[0].getElementsByTagName("a")[0].innerHTML, // namn loopList[i].getElementsByTagName("h4")[0].innerHTML.split('<a href="/produkt.php?p=')[1].split('"')[0].split("&")[0], // id loopList[i].getElementsByClassName("one-line")[0].innerHTML.split("\n")[0] // kategori )); } } else if (currURL.split("view=")[1][0] == "b" && owner) { // Om view=b, bilder och listan är egenägd catPossible = false; var loopList = document.getElementById("listviewpage-currentlistview").getElementsByClassName("list-row"); for (i = 0; i < loopList.length; i++) { products.push(new Product( loopList[i].getElementsByTagName("a")[0].innerHTML, // namn loopList[i].getElementsByTagName("a")[0].href.split("/produkt.php?p=")[1] // id )); } } else if (currURL.split("view=")[1][0] == "b" && !owner) { // Om view=b, bilder och listan _inte_ är egenägd var loopList = document.getElementById("listviewpage-currentlistview").getElementsByClassName("list-row"); for (i = 0; i < loopList.length; i++) { products.push(new Product( loopList[i].getElementsByClassName("text_top")[0].getElementsByTagName("a")[0].innerHTML, // namn loopList[i].getElementsByClassName("text_top")[0].innerHTML.split('<a href="/produkt.php?p=')[1].split('"')[0].split("&")[0], // id loopList[i].getElementsByClassName("text_bottom")[0].getElementsByTagName("a")[0].innerHTML // kategori )); } } else if (currURL.split("view=")[1][0] == "c") { // Om view=c, jämför var loopList = document.getElementById("div_produktegenskaper_jmf").getElementsByTagName("tr")[0].getElementsByTagName("th"); for (i = 1; i < loopList.length; i++) { // Börja på ett för att första rutan inte innehåller någon produkt products.push(new Product( loopList[i].getElementsByTagName("h3")[0].getElementsByTagName("a")[0].innerHTML, // namn loopList[i].getElementsByTagName("h3")[0].innerHTML.split('<a href="/produkt.php?p=')[1].split('"')[0].split("&")[0], // id loopList[i].getElementsByClassName("category-name")[0].getElementsByTagName("a")[0].innerHTML // kategori )); } } else if (currURL.split("view=")[1][0] == "o") { // Om view=o, prisoptimering var loopList = document.getElementById("list_items").getElementsByTagName("tr"); for (i = 0; i < loopList.length; i++) { products.push(new Product( loopList[i].getElementsByTagName("a")[1].innerHTML.split("</span>\n")[1].split("\n<span")[0], // namn loopList[i].innerHTML.split('<a href="/produkt.php?p=')[1].split('"')[0].split("&")[0], // id loopList[i].getElementsByClassName("muted")[0].innerHTML.split("(")[1].split(")")[0] // kategori )); } var optiProds = []; var lists = document.querySelectorAll("[id^=det_]"); for (var i = 0; i < lists.length; i++) { optiProds.push([]); var loopList = lists[i].getElementsByClassName("no-borders"); for (var j = 0; j < products.length; j++) { var id = loopList[j].querySelector("a").href.split("/produkt.php?p=")[1]; var index = 0; while (products[index].id != id) { index++; } var tillButiken = loopList[j].querySelector(".btn.success"), retailLink = false, retailer = false; if (tillButiken) { retailLink = tillButiken.href; retailer = tillButiken.title.slice(30); } else { retailer = loopList[j].parentNode.parentNode.parentNode.parentNode.querySelector("a").getAttribute("data-label"); // århundradets finaste rad som säkert inte fungerar i ff heller } optiProds[i].push(new Product( products[index].name, // name products[index].id, // id products[index].category, // category parseInt(loopList[j].querySelector(".price").innerHTML.replace(/\D/g,'')), // price retailLink, retailer )); } lists[i].querySelector("tr").appendChild(document.createElement("th")); createButton("Hämta prisoptimering som BB-Kod", function() { copyPopup(tablify(optiProds[this])); }.bind(i), "", lists[i].querySelector(".text-right.strong")); } } } var grey = ";background: rgba(128,128,128,0.5); border-color: rgba(0, 0, 0, 0);"; if (products.length) { createButton("BB-Kod med kategori", function() { if (catPossible) { copyPopup(tablify(products)); } else { alert("Kategori är inte tillgängligt i det nuvarande visningsläget."); } }, "margin-left: 31px" + (catPossible ? "" : grey)); createButton("BB-Kod utan kategori", function(){ copyPopup(tablify(products, false)); }, "margin-left: 6px"); } else { createButton("BB-Kod med kategori", function(){ alert("Det finns inga produkter i den här listan."); }, "margin-left:31px" + grey); createButton("BB-Kod utan kategori", function(){ alert("Det finns inga produkter i den här listan."); }, "margin-left:6px" + grey); } }