Com'back

Ajoute un choix pour le type (écrit, audio, vidéo...) de message envoyé.

As of 2016-02-22. See the latest version.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         Com'back
// @namespace    https://greasyfork.org/fr/scripts/17200-com-back
// @version      0.7.1
// @description  Ajoute un choix pour le type (écrit, audio, vidéo...) de message envoyé.
// @author       DarKobalt, Naugriim(♥)
// @match        http://www.dreadcast.net/Main
// @grant        none
// ==/UserScript==


//DEBUT DE L'INITIALISATION DES BOUTONS

//IMPORTANT: N'ESSAYEZ PAS DE RAJOUTER DES LIGNES POUR L'INSTANT. Sérieusement. Ca ne marche pas.
//Initialisation des caractères affichés sur les boutons. NE PAS METTRE PLUS D'UN CARACTERE. SI L'AFFICHAGE BUGUE, UTILISER LE CODE UNICODE (Ressemble à ça: &#x1F4DD).
//Bidouilleurs en herbe, si vous avez des trucs stylés à partager pour les boutons par défaut, n'hésitez pas à me contacter pour que je les ajoute de base dans le code.
var vButton = [];
vButton.push("?");
vButton.push("?");
vButton.push("?");
vButton.push("?");
vButton.push("?");
vButton.push("▶️"); 

//Initialisation des messages ajoutés par les boutons.
var dataAnnexes = [];
dataAnnexes.push('【? Pièce jointe: ""】\n\n');
dataAnnexes.push('【? Accusé de réception】\n\n');
dataAnnexes.push('【? Envoi de données en cours: ""】\n\n');
dataAnnexes.push('【? Chargement en cours, veuillez patienter.】\n\n');
dataAnnexes.push('【? Fichier: ""】\n\n');
dataAnnexes.push('【▶️ Lecture: ""】\n\n');

//FIN DE L'INITIALISATION DES BOUTONS
//A partir d'ici, toute modification est (encore plus qu'avant) à vos risques et périls.


var listeTypes = []; //Liste des introductions de message.
listeTypes.push("");
listeTypes.push("\n                    【? \/ Message écrit】\n\n\n");
listeTypes.push("\n                    【? \/ Message audio】\n\n\n");
listeTypes.push("\n                    【? \/ Message vidéo】\n\n\n");
listeTypes.push("\n                    【? \/ Depuis un deck】\n\n\n");
listeTypes.push("\n                     【❌ \/ Message HRP】\n\n\n");

var init = false;




function mainf() { //Fonction principale pour nouveau message

    if(!init) { //Création de l'interface à la première ouverture.
        var strTypeList = '<div id="DCCB_divListe" style="z-index:999999;position: absolute;top: 25px;left: 320px;background-color: #ACABAB;">' +
            '<select id="listeTypes">' +
            '<option selected> ' +
            '<option>&#x1F4DD - Message écrit' +
            '<option>&#x1F50A - Message audio' +
            '<option>&#x1F3A5 - Message vidéo' +
            '<option>&#x1F4BB - Depuis un deck' +
            '<option>&#x274C - Message HRP' +
            '</select></div>';
        $("#db_new_message > div.content").append(strTypeList); //Ajout du menu déroulant.

        var strButton = '<div id="button_listeTypes" '+
            'style="position: absolute; left: 50%; bottom: -13px; margin-left: -72px; width: 133px; height: 26px; background: url(../../../images/fr/design/boutons/btn_message.png) -399px 0 no-repeat; cursor: pointer;" '+
            'onmouseover="this.style.backgroundPosition=`-399px -26px`;" '+
            'onmouseout="this.style.backgroundPosition=`-399px 0px`;"></div>';
        $("#db_new_message > div.content").append(strButton); //Ajout du bouton imitant le bouton d'envoi. Il a les mêmes propriétés que le bouton d'envoi classique.

        //Initialisation du code des boutons annexes pour ajouter des bouts de texte (pièce jointe, etc).
        var strAnnexes = '';
        for (var i = 0; i < 6; i++) {
            strAnnexes = strAnnexes + '<button class="cb_annexes" id="DCCB_b'+ i.toString() +'">' +vButton[i]+ '</button>';
        }
        $("#db_new_message > div.content").append('<div id="div_cb_annexes" style="z-index:999999;position: absolute;top: 57px;left: 492px;width: 30px;">' + strAnnexes + '</div>'); //Ajout des boutons 
        $(".cb_annexes").css({"background-color": "#ACABAB", "height": "30px", "width": "30px", "font-size": "20px"}); //Ajout du CSS des boutons.

        init = true;
    }

    //INTRO DE MESSAGE
    var addIntro = function() { //Ajoute l'intro PUIS envoie le message (fonction copiée depuis l'inline css).
        
        $(".message_nouveau > #nm_texte > textarea").val(listeTypes[document.getElementById("listeTypes").selectedIndex] + $(".message_nouveau > #nm_texte > textarea").val());
        nav.getMessagerie().sendMessage($("#db_new_message"));
        
    };
    document.getElementById("button_listeTypes").addEventListener('click', addIntro, true);

    //AJOUT BOUTONS ANNEXES
    var selector = ".message_nouveau > #nm_texte > textarea";
    var arrayBoutons = [];
    arrayBoutons = document.getElementsByClassName("cb_annexes");
    arrayBoutons[0].addEventListener('click', function(){$(selector).val($(selector).val() + dataAnnexes[0]);}, false);
    arrayBoutons[1].addEventListener('click', function(){$(selector).val($(selector).val() + dataAnnexes[1]);}, false);
    arrayBoutons[2].addEventListener('click', function(){$(selector).val($(selector).val() + dataAnnexes[2]);}, false);
    arrayBoutons[3].addEventListener('click', function(){$(selector).val($(selector).val() + dataAnnexes[3]);}, false);
    arrayBoutons[4].addEventListener('click', function(){$(selector).val($(selector).val() + dataAnnexes[4]);}, false);
    arrayBoutons[5].addEventListener('click', function(){$(selector).val($(selector).val() + dataAnnexes[5]);}, false);

    console.log("Com'back started: nouveau message"); //Debug
}

$("div.btnTxt.link").click(mainf); //Activation du script à l'ouverture de la fenêtre de nouveau message. Merci à Naugriim!




function filcomf() { //Fonction principale pour fil de com' déjà existant

    $("#liste_messages").ajaxComplete(function(){ //Naugriim, je t'aime. <3 (Attendre le chargement de la fenêtre avant d'envoyer la sauce)

        $("#liste_messages").unbind('ajaxComplete'); //Evite de renvoyer à chaque nouvelle requête ajax du jeu et donc de dupliquer la fonction

        var mid = $(".content > .message > .zone_reponse").parent().parent().parent().attr('id').substring(11); //Récupère l'id du message
        $("#db_message_" + mid.toString() + " > .content > div.message > div.btnTxt").click(function() { //Création et affichage lors du clic sur l'un des boutons en bas de la fenêtre

            var idMessage = mid;

            if(document.getElementById("dccb_div_fc_" + idMessage.toString()) === null) { //Ne recrée pas l'interface du script si elle existe déjà: REND IMPOSSIBLE L'OUVERTURE DE PLUSIEURS COMS SANS BUGS.

                var strTypeListfc = '<div class="dccb_div_fc" id="dccb_div_fc_'+idMessage.toString()+'" '+
                    'style="z-index:999999;position: absolute;top: 348px;left: 100px;background-color: #FFFFFF;-webkit-box-shadow: 0 0 1px 0px #329bc2;border-color: #207695;border-style: solid;border-width: thin;">'+
                    '<select class="listeTypesfc" id="listeTypesfc_' + idMessage.toString() + '" style="color: #397d94; height: 27px;">'+
                    '<option selected> '+
                    '<option>&#x1F4DD - Message écrit'+
                    '<option>&#x1F50A - Message audio'+
                    '<option>&#x1F3A5 - Message vidéo'+
                    '<option>&#x1F4BB - Depuis un deck'+
                    '<option>&#x274C - Message HRP'+
                    '</select></div>';
                $("#db_message_" + idMessage.toString() + " > .content > .message").append(strTypeListfc); //Ajout du menu déroulant.

                var strButtonfc = '<div class="button_listeTypesfc" id="button_listeTypesfc_'+idMessage.toString()+'" '+
                    'style="position: absolute; top: 343px; left: 2px; '+
                    'float: left;padding: 4px 20px 3px;text-transform: uppercase;font-size: 12px;margin-right: 10px;font-weight: 700;'+
                    'text-align: center;margin: 6px 0;cursor: pointer;background: #fff;border: 1px solid #fff;color: #397d94;'+
                    'font-family: "Trebuchet MS",Verdana,Arial,sans-serif;line-height: 18px;" '+
                    'onmouseover="this.style.backgroundColor=`#053D50`;this.style.color=`#FFFFFF`;" '+
                    'onmouseout="this.style.backgroundColor=`#FFFFFF`;this.style.color=`#397d94`;">Envoyer</div>';
                $("#db_message_" + idMessage.toString() + " > .content > .message").append(strButtonfc); //Ajout du bouton imitant le bouton d'envoi.

                var strAnnexesfc = ''; //Initialisation du code des boutons.
                for(var i = 0; i < 6; i++) {
                    var tempstr = '<button class="cb_annexesfc cb_annexesfc_' + idMessage.toString() + '" id="DCCB_b' + i.toString() + '_' + idMessage.toString() + '">' + vButton[i] + '</button>';
                    strAnnexesfc = strAnnexesfc + tempstr;
                }
                $("#db_message_" + idMessage.toString() + " > .content > .message").append('<div class="dccb_annexesfc" id="dccb_annexesfc_'+idMessage.toString()+'" style="z-index:999999;position: absolute;top: 348px;left: 250px;height: 30px;">' + strAnnexesfc + '</div>');
                $(".cb_annexesfc_"+idMessage.toString()).css({"color": "#397D94", "background-color": "#FFFFFF", "height": "30px", "width": "30px", "font-size": "15px", "border-color": "#207695"}); //Ajout du CSS des boutons.

                var textareaPath = "#db_message_" + idMessage.toString() + " > .content > .message > .zone_reponse > .texte > #nm_texte > textarea";

                var addIntrofc = function() { //Ajoute l'intro PUIS envoie le message.

                    $(textareaPath).val(listeTypes[document.getElementById("listeTypesfc_"+idMessage.toString()).selectedIndex] + $(textareaPath).val());
                    nav.getMessagerie().sendMessage($("#db_message_" + idMessage.toString()));

                };
                document.getElementById("button_listeTypesfc_"+idMessage.toString()).addEventListener('click', addIntrofc, false);

                var arrayBoutonsfc = [];
                arrayBoutonsfc = document.getElementsByClassName("cb_annexesfc_"+idMessage.toString());
                arrayBoutonsfc[0].addEventListener('click', function(){$(textareaPath).val($(textareaPath).val() + dataAnnexes[0]);}, false);
                arrayBoutonsfc[1].addEventListener('click', function(){$(textareaPath).val($(textareaPath).val() + dataAnnexes[1]);}, false);
                arrayBoutonsfc[2].addEventListener('click', function(){$(textareaPath).val($(textareaPath).val() + dataAnnexes[2]);}, false);
                arrayBoutonsfc[3].addEventListener('click', function(){$(textareaPath).val($(textareaPath).val() + dataAnnexes[3]);}, false);
                arrayBoutonsfc[4].addEventListener('click', function(){$(textareaPath).val($(textareaPath).val() + dataAnnexes[4]);}, false);
                arrayBoutonsfc[5].addEventListener('click', function(){$(textareaPath).val($(textareaPath).val() + dataAnnexes[5]);}, false);

            }
        });

    });

    console.log("Com'back started: fil de com"); //Debug
}

$("li.message").click(filcomf); //1ère initialisation

$("#folder_list > .folder").click(function() { //Actualiser les events sur les li.message lors d'un changement de dossier (ceux-ci semblent être effacés)

    $("#liste_messages").ajaxComplete(function(){

        $("#liste_messages").unbind('ajaxComplete');
        $("li.message").click(filcomf); //Pas besoin de .off() puisque le site a recréé la liste
        console.log("Changement de dossier - Actualisation des events");

    });

});

$("#display_messagerie").click(function() {

    $("#liste_messages").ajaxComplete(function(){

        $("#liste_messages").unbind('ajaxComplete');
        $("li.message").off("click", filcomf); //Eviter un doublon d'event
        $("li.message").click(filcomf);
        console.log("Clic sur la liste des messages - Actualisation des events");

    });

});

var lastList = $("#liste_messages > div.content > ul").text();
console.log(lastList);
console.log($("#liste_messages > div.content > ul").text());

setInterval(function() { //Fix dégueulasse pour le bug des messages anciens qui n'affichent pas l'interface.
    if($("#liste_messages > div.content > ul").text() != lastList) {
        lastList = $("#liste_messages > div.content > ul").text();
        $("li.message").off("click", filcomf); //Eviter un doublon d'event
        $("li.message").click(filcomf);
        console.log("Changement HTML - Actualisation des events");
    }
}, 1000);

console.log("Com'back initialisé!");