Greasy Fork is available in English.

Sorties OVS filtrees en fonction de l'age des organisateurs (NANTES)

Supprimer les sorties OVS organisees en fonction de l'age des organisateurs

// ==UserScript==
// @name           Sorties OVS filtrees en fonction de l'age des organisateurs (NANTES)
// @date           May 16, 2014
// @author         Yohann nizon -> https://www.gameandme.fr
// @description    Supprimer les sorties OVS organisees en fonction de l'age des organisateurs
// @include        http://*.onvasortir.com/vue_sortie*
// @include        http://*.onvasortir.com/vue_infos.php
// @version 1.0
// @matches        http://*.onvasortir.com/vue_sortie*
// @matches        http://*.onvasortir.com/vue_infos.php
// @run_at document_end
// @namespace https://greasyfork.org/users/63143
// ==/UserScript==

//redefinition des methodes pour chrome (partie de code touve sur le web)
if (typeof GM_deleteValue == 'undefined')
{
    GM_getValue = function(name, defaultValue)
    {
        var value = localStorage.getItem(name);
        if (!value)
            return defaultValue;
        var type = value[0];
        value = value.substring(1);
        switch (type)
        {
            case 'b': return value == 'true';
            case 'n': return Number(value);
            default : return value;
        }
    };

    GM_setValue = function(name, value)
    {
        value = (typeof value)[0] + value;
        localStorage.setItem(name, value);
    };
}

//la variable bouton recupere l'element bouton qui contient le bouton "Recherche avancée >>" ou "Deviens Membre PREMIUM >>" selon la page
var bouton=document.querySelector('input[value="Recherche avancée »"]');
if (document.location.href == 'http://paris.onvasortir.com/vue_infos.php')
    bouton=document.querySelector('input[value="Deviens Membre PREMIUM >>"]');
//alert("Debug: "+bouton.parentNode.innerHTML);

//la variable ageSelect1 contient un element liste deroulante pour l'age minimal de notre filtre
//la variable ageSelect2 contient un element liste deroulante pour l'age maximal de notre filtre
var ageSelect1=document.createElement('select'), ageSelect2=document.createElement('select');

//on remplie nos deux listes deroulantes, et on les force sur les valeurs precedemment sauvegardes
for(var i=17; i<100; i++)
{
    if(i == GM_getValue("ageMin", 17)) 
        ageSelect1.innerHTML +='<option value="'+ i +'" selected>De '+ i +' ans </option>';
    else
        ageSelect1.innerHTML +='<option value="'+ i +'">De '+ i +' ans </option>';
    if(i == GM_getValue("ageMax", 99)) 
        ageSelect2.innerHTML +='<option value="'+ i +'" selected>à '+ i +' ans</option>';
    else
        ageSelect2.innerHTML +='<option value="'+ i +'">à '+ i +' ans</option>';
}

//on rajoute nos deux listes deroulantes a la page web avant le bouton
bouton.parentNode.appendChild(ageSelect1);
bouton.parentNode.appendChild(ageSelect2);
bouton.parentNode.insertBefore(ageSelect1,bouton);
bouton.parentNode.insertBefore(ageSelect2,bouton);

//on attribue a nos deux listes deroulantes des actions lorsqu'on leurs selectionne une valeur; sauvegarder nouvelle valeur et rechanger la page si le filtre est actif
ageSelect1.addEventListener('change',function(){
    GM_setValue("ageMin",ageSelect1.options[ageSelect1.selectedIndex].getAttribute('value'));
    if(GM_getValue("etat", false) == true)
        document.location.reload();
},false);
ageSelect2.addEventListener('change',function(){
    GM_setValue("ageMax",ageSelect2.options[ageSelect2.selectedIndex].getAttribute('value'));
    if(GM_getValue("etat", false) == true)
        document.location.reload();
},false);

//on cree un nouveau bouton
var nouveauBouton=document.createElement('input');
nouveauBouton.setAttribute('type','button');
nouveauBouton.setAttribute('value','Activé');
//on attribu a notre bouton une action lorsque l'on clique dessus
nouveauBouton.addEventListener("click",clickButton,false);

//on remplace l'ancien bouton par le notre
bouton.parentNode.replaceChild(nouveauBouton, bouton);

//si le filtre est precedemment active et si l'intervale des ages est correct, alors on filtre directement, sinon non
if(GM_getValue("etat", false) == true && GM_getValue("ageMin", 17) < GM_getValue("ageMax", 99)) 
{
    run();
    nouveauBouton.setAttribute('value','Filtre Activé');
}
else
    nouveauBouton.setAttribute('value','Filtre Non Activé');

//fonction lorsque l'on click sur le bouton
function clickButton()
{
    //si l'on n'a pas active le script precedemment et l'intervale des ages est correct, on l'active et on enregistre son etat, sinon on le desactive et on recharge la page
    if(GM_getValue("etat",false) == false && GM_getValue("ageMin", 17) < GM_getValue("ageMax", 99)) 
    {
        //on sauvegarde le nouvelle etat de filtrage
        GM_setValue("etat", true);
        //on lance notre filtre
        run();
        //on met a jour le texte du bouton
        nouveauBouton.setAttribute('value','Filtre Activé');
        alert('Execution du script "Sorties OVS filtrees en fonction de l\'age des organisateurs"\n\nVous allez filter maintenant les sorties des organisateurs dont l\'age est entre '+GM_getValue("ageMin", 17)+' ans et '+GM_getValue("ageMax", 99)+' ans\n\n\n\nAuteur: BlazingSun (utilisateur OVS Paris)\nPS: Si vous trouvez ce script utile et vous souhaitez remercier pour son travail bénévole son auteur, envoyez-lui un petit message sympa de remerciement sur le site ou payez-lui un coup à boire si vous le rencontrez ;-)\n\nLicence: Copyleft GPLv2');
    }
    else
    {
        //on sauvegarde le nouvelle etat de filtrage
        GM_setValue("etat", false);
        //on recharge la page
        document.location.reload();
    }
}

//on execute le filtrage si il a ete active 
function run()
{
    //la variable toutesLesSorties recupere tous les indentifacateurs de sorties
    var toutesLesSorties = document.querySelectorAll('div[class="Event_Line"]'); 
    //alert("Debug: "+toutesLesSorties[0].parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.querySelector('a[onmouseover]').getAttribute('onmouseover'));
    
    //on parcout tous les sorties une a une
    //alert(toutesLesSorties.length);
    for (var i = 0; i < toutesLesSorties.length; i++)
    {
        //la variable sortie recupere en fonction d'un indentifacateur de sorties toutes les informations sur la sortie
        var sortie = toutesLesSorties[i];
        //alert("Debug: "+sortie.innerHTML);

        //la variable donneesOrganisateur recupere les informations sur l'organisateur de la sortie
        var donneesOrganisateur = sortie.querySelector('div[class="Event_Orga"]');
        if (donneesOrganisateur != null){
            //si le compte de l'organisateur a ete supprime, on supprime la sortie et on passe a la suivante
            var span = donneesOrganisateur.querySelector('span');
            donneesOrganisateur = $(donneesOrganisateur).text();

            //on verifie si l'organisateur a indique son age, sinon on supprime sa sortie de la pageOrganisateur web
            if (donneesOrganisateur.indexOf(' ans') > - 1)
            {
                //la variable ageOrganisateur recupere l'age de l'organisateur de la sortie
                var ageOrganisateur = donneesOrganisateur.substring(donneesOrganisateur.indexOf(' ans')-2, donneesOrganisateur.indexOf(' ans'));

                //si l'organisateur de la sortie a plus de l'age max, on supprime sa sortie de la page web
                if (ageOrganisateur > GM_getValue("ageMax", 99)) 
                {  
                    sortie.parentNode.removeChild(sortie);
                    //alert("Debug: "+sortie.innerHTML);
                }
                //si l'organisateur de la sortie a moins de l'age min, on supprime sa sortie de la page web
                if (ageOrganisateur < GM_getValue("ageMin", 17)) 
                {  
                    sortie.parentNode.removeChild(sortie);
                    //alert("Debug: "+sortie.innerHTML);
                }
            }
            else
            {
                //l'organisateur m'a pas indique son age, on supprime sa sortie de la page web
                //sortie.parentNode.removeChild(sortie);
                //alert("Debug: "+sortie.innerHTML);
            }
        }
    }
}