Amazon Spoilers and More

Adds spoilers to product pages and more

// ==UserScript==
// @name        Amazon Spoilers and More
// @name:de     Amazon Spoiler und Mehr
// @namespace   ecken
// @author      ecken
// @version     1.1
// @description Adds spoilers to product pages and more
// @description:de Fügt Spoiler zu Produktseiten hinzu und mehr
// @grant       none
// @include     https://*.amazon.*/*
// @icon        https://www.amazon.com/favicon.ico
// ==/UserScript==


/// Settings ///

var navbarHidePrimeAds = true;
var navbarHideBanner = true;
var productpageReorderItems = true;
var productpageSpoilerifyItems = true;
var productpageSpoilersClosedByDefault = true;
var productpageSpoilerifyButton = true;
var searchSortedBy = true;
var searchSortedByCat = "price-asc-rank";

// searchSortedByCat options:
// "relevanceblender" 
// "price-asc-rank"
// "price-desc-rank"
// "review-rank"
// "date-desc-rank"




//create css for buttons
var style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = ".amazonimproverbutton {background: linear-gradient(to bottom,#f7f8fa,#e7e9ec); border-radius: 3px; border-color: #ADB1B8 #A2A6AC #8D9096; border-style: solid; border-width: 1px; cursor: pointer; display: inline-block; padding: 5px 8px; text-align: left; text-decoration: none!important; vertical-align: middle; font-size: 18px}"
+ ".amazonimproverbutton:hover {background: linear-gradient(to bottom,#e7eaf0,#d9dce1); border-color: #a2a6ac #979aa1 #82858a; }";
document.getElementsByTagName('head')[0].appendChild(style);


//hide prime ads
if (navbarHidePrimeAds){
  document.getElementsByClassName("nav-sprite nav-logo-tagline nav-prime-try")[0].style = "display: none";
  document.getElementById("nav-link-prime").style = "display: none";
}
  
//hide banner
if (navbarHideBanner) document.getElementById("nav-swmslot").style = "display: none";

//search sorted-by default

function searchSortByA(){
  try {
    document.getElementById("a-autoid-0-announce").click(); //generate dropdown
  }
  catch(e){
    return;
  }
  setTimeout(searchSortByB,1000);
  console.log("A");
}
function searchSortByB(){
  try {
    switch (searchSortedByCat) {
      case "relevanceblender": 
        document.getElementById("s-result-sort-select_0").click();
        break;
      case "price-asc-rank":
        document.getElementById("s-result-sort-select_1").click();
        break;
      case "price-desc-rank":
        document.getElementById("s-result-sort-select_2").click();
        break;
      case "review-rank":
        document.getElementById("s-result-sort-select_3").click();
        break;
      case "review-rank":
        document.getElementById("s-result-sort-select_4").click();
        break;
      case "date-desc-rank":
        document.getElementById("s-result-sort-select_5").click();
        break;
      default:
        console.log("Default sorted-by: Wrong name");
    }
    console.log("B");
  }
  catch(e) {
    //it seems we're not on a search page
  }
}

if (!!window.location.toString().match(/amazon\.\/s/) & searchSortedBy & !window.location.toString().match(/ref=sr_st_/)) setTimeout(searchSortByA,1000);

//reorder elements
if (productpageReorderItems){
  try {
    document.getElementById("dp-container").insertBefore(document.getElementById("detail-bullets_feature_div"),document.getElementById("sims-consolidated-2_feature_div"));
    document.getElementById("dp-container").insertBefore(document.getElementById("dpx-product-description_feature_div"),document.getElementById("sims-consolidated-2_feature_div"));
  }
  catch(e) {
    //it seems we're not on a product page
  }
}

//spoiler show/hide function
function toggle(div){
	if (div.style.display == "none")
    div.style.display = "block";
  else
    div.style.display = "none";
}

//spoilerify product page
function spoilerify(){
  try {
    var elems = document.getElementById("dp-container").children;
  }
  catch(e) {
    return; //it seems we're not on a product page
  }
    
  for (var i = 0; i < elems.length; i++){
  	if (!(elems[i].hasAttribute("spoilerified")) & elems[i].tagName == "DIV" & elems[i].scrollHeight > 130 & elems[i].scrollWidth >= 0.9 * document.getElementById("dp-container").clientWidth ){
      let e = elems[i];
      e.setAttribute("spoilerified",true);
      //e.style = "border: solid red 1px";
      
      //create spoiler show/hide button
      let btn = document.createElement("button");
      btn.setAttribute("type","button");
      btn.setAttribute("class","amazonimproverbutton");
      try {
        btn.innerHTML = elems[i].getElementsByTagName("h2")[0].innerText.trim();
      }
      catch(e) {
        btn.innerHTML = "Toggle";
      }
      btn.addEventListener("click",function(){toggle(e)});
        
      //create spoilerify button
        let btn2 = document.createElement("button");
        btn2.setAttribute("type","button");
        btn2.setAttribute("class","amazonimproverbutton");
        
        btn2.innerHTML = "S";
        btn2.addEventListener("click",spoilerify);
      
      //add buttons to page
      document.getElementById("dp-container").insertBefore(btn, e);
      if (productpageSpoilerifyButton) document.getElementById("dp-container").insertBefore(btn2, e);
      document.getElementById("dp-container").insertBefore(document.createElement("br"), e);
      
      //close spoiler by default
      if (productpageSpoilersClosedByDefault) toggle(e);
    }
  }
  
}
if (productpageSpoilerifyItems) spoilerify();

//create quick navigation
/*
var ql-items = [["Details","#detailsAndDescription"], [], []]

var newItem = document.createElement("li");
var textnode = document.createTextNode("Water");
newItem.appendChild(textnode);

var list = document.getElementById("dp");
list.insertBefore(newItem, list.childNodes[0]);

*/