BS Favorites

Easy Favorites

// ==UserScript==
// @name         BS Favorites
// @namespace    https://bs.to
// @version      1.3.7
// @description  Easy Favorites
// @author       Asu_nyan
// @match        https://bs.to/*
// @match        https://burningseries.co/*
// @grant        none
// @icon         https://bs.to/favicon.ico
// @require      https://greasyfork.org/scripts/375096-bs-library/code/BS_Library.js?version=651891
// ==/UserScript==
// jshint esversion: 6

const BS = window.BS;
const AjaxReload = true; // Lädt die Serienliste in der Navigation neu, wenn eine Aktion ausgeführt wird.
const css = `
.bootstrap-btn {
  display: inline-block;
  font-weight: 400;
  text-align: center;
  white-space: nowrap;
  vertical-align: middle;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  border: 1px solid transparent;
  padding: 0.375rem 0.75rem;
  font-size: 1rem;
  line-height: 1.5;
  border-radius: 20rem !important;
  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}

@media screen and (prefers-reduced-motion: reduce) {
  .bootstrap-btn {
    transition: none;
  }
}

.bootstrap-btn:hover, .bootstrap-btn:focus {
  text-decoration: none;
}

.bootstrap-btn:focus, .bootstrap-btn.focus {
  outline: 0;
  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
}

.bootstrap-btn.disabled, .bootstrap-btn:disabled {
  opacity: 0.65;
}

.bootstrap-btn:not(:disabled):not(.disabled) {
  cursor: pointer;
}

a.bootstrap-btn.disabled,
fieldset:disabled a.btn {
  pointer-events: none;
}

.btn-info {
  color: #fff;
  background-color: #17a2b8;
  border-color: #17a2b8;
}

.btn-info:hover {
  color: #fff;
  background-color: #138496;
  border-color: #117a8b;
}

.btn-info:focus, .btn-info.focus {
  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
}

.btn-info.disabled, .btn-info:disabled {
  color: #fff;
  background-color: #17a2b8;
  border-color: #17a2b8;
}

.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,
.show > .btn-info.dropdown-toggle {
  color: #fff;
  background-color: #117a8b;
  border-color: #10707f;
}

.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,
.show > .btn-info.dropdown-toggle:focus {
  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
}

.btn-outline-info {
  color: #17a2b8;
  background-color: transparent;
  background-image: none;
  border-color: #17a2b8;
}

.btn-outline-info:hover {
  color: #fff;
  background-color: #17a2b8;
  border-color: #17a2b8;
}

.btn-outline-info:focus, .btn-outline-info.focus {
  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
}

.btn-outline-info.disabled, .btn-outline-info:disabled {
  color: #17a2b8;
  background-color: transparent;
}

.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,
.show > .btn-outline-info.dropdown-toggle {
  color: #fff;
  background-color: #17a2b8;
  border-color: #17a2b8;
}

.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,
.show > .btn-outline-info.dropdown-toggle:focus {
  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
}

.btn-sm, .bootstrap-btn {
  padding: 0.25rem 0.5rem;
  font-size: 0.875rem;
  line-height: 1.5;
  border-radius: 0.2rem;
}
`;

let favshows = [];

const addFav = 'Zu Favoriten hinzufügen';
const remFav = 'Aus Favoriten entfernen';

(function() {
    'use strict';
    BS.Favorites.Get((list) => {
        favshows = list;
    });
    setTimeout(setup, 1000);
})();


function setup() {
    BS.Helper.InjectCSS(null, css);
    let a = document.querySelector('#sp_left h2');
    let span = document.createElement('span');
    let btnFav = document.createElement('button');
    let btnClass = (favshows.includes(BS.Series.ID())) ? 'btn-info' : 'btn-outline-info';
    span.id = 'bs-fav-script';
    span.appendChild(btnFav);
    btnFav.classList.add('bootstrap-btn');
    btnFav.classList.add('btn-xs');
    btnFav.classList.add(btnClass);
    btnFav.innerText = (favshows.includes(BS.Series.ID())) ? remFav : addFav;
    btnFav.addEventListener('click', clickEvent);
    a.appendChild(span);
}

function clickEvent(e) {
    let b = (e.target.innerText.trim() == addFav) ? true : false;
    if(b) {
        e.target.classList.remove('btn-outline-info');
        e.target.classList.add('btn-info');
        e.target.innerText = remFav;
    } else {
        e.target.classList.remove('btn-info');
        e.target.classList.add('btn-outline-info');
        e.target.innerText = addFav;
    }
    blockAction(e.target, 1000, () => {
        let id = BS.Series.ID();
        if(b) favshows.push(id);
        else {
            let index = favshows.indexOf(id);
            favshows.splice(index, 1);
        }
        BS.Favorites.Save(favshows, AjaxReload);
    });
}

function blockAction(el, time, callback) {
    el.classList.add('disabled');
    el.setAttribute('disabled', true);
    if(callback) callback();
    setTimeout(() => {
        el.classList.remove('disabled');
        el.removeAttribute('disabled');
    }, time);
}


// 1. Create the button
var discordbutton = document.createElement("button");
discordbutton.innerHTML = "Discord";
discordbutton.style.float = "right";
discordbutton.style.backgroundColor = "#1F1F1F";
discordbutton.style.color = "#C9C9C9";
discordbutton.style.cursor = "help";
discordbutton.style.opacity = 1.001;

// 2. Append somewhere
var navigation = document.getElementsByClassName("navigation")[0];
navigation.children[0].appendChild(discordbutton);

// 3. Add event handler
discordbutton.addEventListener ("click", function() {
  window.open("https://is.gd/bstodiscord", "_blank");
});


// 1. Create the button
var invisiblediscordbutton = document.createElement("button");
invisiblediscordbutton.innerHTML = "Inoffizieller BS Discord";
invisiblediscordbutton.style.float = "left";
invisiblediscordbutton.style.marginLeft = "-268px";
invisiblediscordbutton.style.marginTop = "109px";
invisiblediscordbutton.style.fontSize = "25px";
invisiblediscordbutton.style.cursor = "help";
invisiblediscordbutton.style.backgroundColor = "#1F1F1F";
invisiblediscordbutton.style.color = "#C9C9C9";
invisiblediscordbutton.style.opacity = 0.001;

// 2. Append somewhere
var navigation2 = document.getElementsByClassName("navigation")[0];
navigation2.children[0].appendChild(invisiblediscordbutton);

// 3. Add event handler
invisiblediscordbutton.addEventListener ("click", function() {
  window.open("https://cutt.ly/bstodiscord", "_blank");
});