Gilfoyle / JVPFavoris

// ==UserScript==
// @name         JVPFavoris
// @version      1.0
// @description  Favoris pour JVP
// @author       Dieu
// @require      http://code.jquery.com/jquery-1.12.4.min.js
// @match        http://www.jeuxvideo.com/forums/*
// @grant        none
// @updateURL    https://openuserjs.org/src/scripts/Gilfoyle/JVPFavoris.user.js
// @downloadURL  https://openuserjs.org/src/scripts/Gilfoyle/JVPFavoris.user.js
// @license MIT
// ==/UserScript==
var btnFav, topicId, titre;
var favs = {};

// le script n'est pas intégré à jvp, on attend qu'il soit chargé
$(window).on('load', function() {
    main();
});

function main(){
    try{
        topicId = window.location.href.split("-")[11];
        titre = document.getElementById("bloc-title-forum").innerText;
    }
    catch(err){
        topicId = undefined;
        titre = undefined;
    }
    ajouterBouton();
    ajouterFavPage();
}

function ajouterBouton(){
    // on utilise cette fonction car le script n'est pas intégré à JVP, on peut pas accéder à la réponse de la reqûete au server jvp
    if ($(".conteneur-message-n4")[0]){
        var crumb = document.createElement("div");
        crumb.className = "options-crumb";
        document.getElementsByClassName("fil-ariane-crumb")[0].appendChild(crumb);

        btnFav = document.createElement("span");
        btnFav.className = "picto-favoris";
        crumb.appendChild(btnFav);

        btnFav.addEventListener('click',ajouterFav);
    }
    checkTopicFav();
}

function checkTopicFav(){
    if (!localStorage.getItem("jvpfav")){ // on verif si il y a déjà des favoris
        return;
    }

    var favsJson = localStorage.getItem("jvpfav");
    favs = JSON.parse(favsJson);

    if(favs.hasOwnProperty(topicId)){
        btnFav.className = "picto-favoris-full";
        btnFav.removeEventListener("click",ajouterFav);
        btnFav.addEventListener("click",supprimerFav);
    }
}

function ajouterFav(){
    btnFav.className = "picto-favoris-full";
    btnFav.removeEventListener("click",ajouterFav);
    btnFav.addEventListener("click",supprimerFav);

    favs[topicId] = titre;
    var favsJson = JSON.stringify(favs);
    localStorage.removeItem("jvpfav");
    localStorage.setItem("jvpfav",favsJson);
    //liste favoris
}

function supprimerFav(){
    btnFav.className = "picto-favoris";
    btnFav.removeEventListener("click",supprimerFav);
    btnFav.addEventListener("click",ajouterFav);

    delete favs[topicId];
    var favsJson = JSON.stringify(favs);
    localStorage.removeItem("jvpfav");
    localStorage.setItem("jvpfav",favsJson);
}

function ajouterFavPage(){
    var h4 = document.createElement("h4");
    h4.className = "titre-info-fofo";
    h4.innerHTML = "Sujets favoris JVP";
    var sujetsfav = document.getElementsByClassName("liste-forums-preferes")[1]
    sujetsfav.parentNode.insertBefore(h4,sujetsfav.nextSibling);

    var ul = document.createElement("ul");
    ul.className = "liste-forums-preferes";
    ul.id = "liste-sujet-prefere";
    h4.parentNode.insertBefore(ul,h4.nextSibling);

    for (var id in favs){
        var li = document.createElement("li");
        li.className = "line-ellipsis";
        li.setAttribute("data-id", id);
        ul.appendChild(li);

        var a = document.createElement("a");
        a.href = "//www.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm#jvp-" + id + "-1";
        a.className = "lien-jv";
        a.innerHTML = favs[id];
        li.appendChild(a);
    }
}