Com'back

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

目前為 2016-03-06 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Com'back
// @namespace    https://gf.qytechs.cn/fr/scripts/17200-com-back
// @version      1.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==

//CONFIGURATION DU TYPE DE MESSAGE PAR DEFAUT
//Changer la valeur par défaut du menu déroulant: il suffit de remplacer à la ligne suivante le chiffre par l'index du choix par défaut (Premier choix = 0, puis 1, 2, 3, 4).
var listeIndex = 0;
//Pour changer la valeur ci-dessous: true = garde le choix du dessus quand on ouvre une fenêtre, false = Garde en mémoire le dernier type de message envoyé.
var b_alwaysDefault = false;
//Change la couleur du texte placé entre "*". Défaut #58dcf9, couleur du texte d'action dans le chat.
var italicTestColor = "#58dcf9";
//FIN CONFIGURATION


//DEBUT DE L'INITIALISATION DES BOUTONS

//IMPORTANT: N'ESSAYEZ PAS DE RAJOUTER DES LIGNES. 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");


//NE RIEN CHANGER A PARTIR D'ICI!
var init = false; //Initialisation nouveau message

var lastIndex = listeIndex; //Mémoriser l'index du dernier type de message envoyé




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;
    }
    document.getElementById("listeTypes").selectedIndex = (b_alwaysDefault)? listeIndex : lastIndex; //Ternaire FTW

    //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());
        lastIndex = document.getElementById("listeTypes").selectedIndex;
        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 format_liens(html) { //Rend les liens cliquables, visualise les images (cliquables).
    
    //URLs starting with http://, https://, or ftp://
    replacePattern1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
    html = html.replace(replacePattern1, '<a href="$1" target="_blank">$1</a>');

    //URLs starting with "www." (without // before it, or it'd re-link the ones done above).
    replacePattern2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
    html = html.replace(replacePattern2, '$1<a href="http://$2" target="_blank">$2</a>');

    html = html.replace(/(<br\/><\/a>)|(<br><\/a>)/gim, '<\/a><br>'); //Problème des liens www dont la fin peut être tronquée avec une balise <br/>
    html = html.replace(/(<br\/>\" target)|(<br>\" target)/gim, '" target'); //Pareil, correction dans le href

    //Transforme les liens d'images en images cliquables
    html = html.replace(/<a\shref=\"([\S]+(\.png|\.jpg|\.jpeg|\.gif))\"\starget=\"_blank\">[\S]+<\/a>/gim, '<center><a href="$1" target="_blank"><img src="$1" style="max-width: 355px;"><\/a></center>');

    //Tranforme le texte entre * en italique
    html = html.replace(/\*([^\*]+)\*/gim, '<span style="font-style: italic; color: ' + italicTextColor + ';">$1</span>');
    
    return html;
}


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


        //LIENS CLIQUABLES
        $("#db_message_" + mid.toString() + " > .content > .message > .contenu > .texte").html(format_liens($("#db_message_" + mid.toString() + " > .content > .message > .contenu > .texte").html()));

        var lastIdClicked = $("#db_message_" + mid.toString() + " .link.conversation.selected").attr('id');
        $("#db_message_" + mid.toString() + " .link.conversation").click(function() {

            var cheminTexte = "#db_message_" + mid.toString() + " > .content > .message > .contenu > .texte";
            $(cheminTexte).ajaxComplete(function() {

                $(cheminTexte).unbind('ajaxComplete');
                
                if($("#db_message_" + mid.toString() + " .link.conversation.selected").attr('id') != lastIdClicked) {
                    lastIdClicked = $("#db_message_" + mid.toString() + " .link.conversation.selected").attr('id'); //Eviter de repasser la fonction qui sinon nique les liens.
                    $(cheminTexte).html(format_liens($(cheminTexte).html()));
                }
            });

        });
        //FIN LIENS CLIQUABLES


        $("#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.
                document.getElementById("listeTypesfc_" + idMessage.toString()).selectedIndex = (b_alwaysDefault)? listeIndex : lastIndex; //Ternaire FTW

                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());
                    lastIndex = document.getElementById("listeTypesfc_" + idMessage.toString()).selectedIndex;
                    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("DCCB - Changement de dossier: Actualisation des events");

    });

});


var lastList = $("#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("DCCB - Changement HTML de la liste de messages: Actualisation des events");
    }
}, 1000);

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

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址