<commit_before>/**
* @file CommentEvents.js
* @brief Script des évenements de la chatbox
*/


/**
* @fn refreshComments Actualise les commentaires
*/
function refreshComments()
{
    // Récupération du bouton d'actualisation
    var updateButton = document.getElementById('commentsSection').children[1].lastElementChild;

    // Si on est en cours d'actualisation, ne fait rien
    if(updateButton.getAttribute('loading') !== null)
        return;

    // Désactivation du bouton de rafraichissement
    updateButton.setAttribute('loading', true);

    // Récupération des infos
    var subInfo = page.queryInfos;

    // Construit et lance la requête (oui... semi GET, semi POST)
    var params = '&fversion=' + subInfo.fversion +
                 '&langto='   + subInfo.lang,
        url = '/translate_comments.php?id=' + subInfo.id,
        action = 'POST';

    // Envoie la requête
    ajax(action, url, params, post_commentRefresh, null, null);
}


/**
* @fn post_commentRefresh Traite les données reçues par ajax
* @param {string} Chaine HTML des commentaires
* @param {boolean} Si une erreur s'est produite
*/
function post_commentRefresh(newCommentsString, isError)
{
    // Récupère les informations utiles
    var commentsSection = document.getElementById('commentsSection');
    var updateButton   = commentsSection.children[1].lastElementChild;
    var commentList    = commentsSection.lastElementChild.firstElementChild;

    // Réactive le bouton (délai pour laisser à l'indicateur le temps de faire au moins un tour)
    setTimeout(function()
    {
        updateButton.removeAttribute('loading');
    }, 750);

    // Enclenche un compte à rebours pour réactualiser les commentaires dans x secondes
    page.refreshCommentsTimeoutId = setTimeout(refreshComments, A7Settings.commentUpdateInterval * 1000);

    if(isError)
    {
        // Indique une erreur
        commentList.setAttribute('class', 'ajaxError');
        commentList.setAttribute('title', loc.ajaxErrorOccurred);
        return;
    }

    // S'il y a eu une erreur, l'enlève
    if(commentList.getAttribute('class') === 'ajaxError')
    {
        commentList.setAttribute('class', '');
        commentList.setAttribute('title', '');
    }

    // Parse la string en HTML
    var newCommentsHTML = document.createElement('span');
    newCommentsHTML.innerHTML = newCommentsString;

    // Récupère la liste
    var listOfNewComments   = newCommentsHTML.firstElementChild.firstElementChild.firstElementChild.children;
    var listOfNewCommLength = (listOfNewComments.length - 5) / 2;

    // Si ce n'est pas l'initialisation
    if(page.commentNumber !== -1)
    {
        // Et qu'il y a de nouveaux commentaires
        if((listOfNewCommLength - page.commentNumber) > 0)
        {
            // Récupère le nombre de commantaires
            var commentCounter = updateButton.previousElementSibling.lastElementChild;
            var oldCommentNumber = isNaN(parseInt(commentCounter.textContent)) ? 0 : parseInt(commentCounter.textContent);

            // Affiche le nombre dans le span et cumule le nombre si possible
            commentCounter.textContent = listOfNewCommLength - page.commentNumber + oldCommentNumber;
        }
    }
    else
    {
        page.commentNumber = 0;
    }

    // Récupère la position
    var oldUserCommentViewHeight = commentList.scrollTop;
    var isUserOnCommentBottom = (commentList.scrollTop + commentList.clientHeight === commentList.scrollHeight);

    // Réinitialise la liste des commentaires
    commentList.innerHTML = '';

    // Re peuple les commentaires du tableau
    for(var i = 2; i < listOfNewCommLength + 2; i++)
    {
        // Retire l'image
        listOfNewComments[i].firstElementChild.firstElementChild.remove();

        // Ajoute le commentaire
        commentList.appendChild(listOfNewComments[i]);
    }

    // Met à jour les informations de la page
    page.commentNumber = listOfNewCommLength;
<commit_msg>Adding user options to the commentBox<commit_after>/**
* @file CommentEvents.js
* @brief Script des évenements de la chatbox
*/


/**
* @fn refreshComments Actualise les commentaires
*/
function refreshComments()
{
    // Récupération du bouton d'actualisation
    var updateButton = document.getElementById('commentsSection').children[1].lastElementChild;

    // Si on est en cours d'actualisation, ne fait rien
    if(updateButton.getAttribute('loading') !== null)
        return;

    // Désactivation du bouton de rafraichissement
    updateButton.setAttribute('loading', true);

    // Récupération des infos
    var subInfo = page.queryInfos;

    // Construit et lance la requête (oui... semi GET, semi POST)
    var params = '&fversion=' + subInfo.fversion +
                 '&langto='   + subInfo.lang,
        url = '/translate_comments.php?id=' + subInfo.id,
        action = 'POST';

    // Envoie la requête
    ajax(action, url, params, post_commentRefresh, null, null);
}


/**
* @fn post_commentRefresh Traite les données reçues par ajax
* @param {string} Chaine HTML des commentaires
* @param {boolean} Si une erreur s'est produite
*/
function post_commentRefresh(newCommentsString, isError)
{
    // Récupère les informations utiles
    var commentsSection = document.getElementById('commentsSection');
    var updateButton   = commentsSection.children[1].lastElementChild;
    var commentList    = commentsSection.lastElementChild.firstElementChild;

    // Réactive le bouton (délai pour laisser à l'indicateur le temps de faire au moins un tour)
    setTimeout(function()
    {
        updateButton.removeAttribute('loading');
    }, 750);

    // Enclenche un compte à rebours pour réactualiser les commentaires dans x secondes
    page.refreshCommentsTimeoutId = setTimeout(refreshComments, A7Settings.commentUpdateInterval * 1000);

    if(isError)
    {
        // Indique une erreur
        commentList.setAttribute('class', 'ajaxError');
        commentList.setAttribute('title', loc.ajaxErrorOccurred);
        return;
    }

    // S'il y a eu une erreur, l'enlève
    if(commentList.getAttribute('class') === 'ajaxError')
    {
        commentList.setAttribute('class', '');
        commentList.setAttribute('title', '');
    }

    // Parse la string en HTML
    var newCommentsHTML = document.createElement('span');
    newCommentsHTML.innerHTML = newCommentsString;

    // Récupère la liste
    var listOfNewComments   = newCommentsHTML.firstElementChild.firstElementChild.firstElementChild.children;
    var listOfNewCommLength = (listOfNewComments.length - 5) / 2;

    // Si ce n'est pas l'initialisation
    if(page.commentNumber !== -1)
    {
        // Et qu'il y a de nouveaux commentaires
        if((listOfNewCommLength - page.commentNumber) > 0)
        {
            // Récupère le nombre de commantaires
            var commentCounter = updateButton.previousElementSibling.lastElementChild;
            var oldCommentNumber = isNaN(parseInt(commentCounter.textContent)) ? 0 : parseInt(commentCounter.textContent);

            // Affiche le nombre dans le span et cumule le nombre si possible
            commentCounter.textContent = listOfNewCommLength - page.commentNumber + oldCommentNumber;
        }
    }
    else
    {
        page.commentNumber = 0;
    }

    // Récupère la position
    var oldUserCommentViewHeight = commentList.scrollTop;
    var isUserOnCommentBottom = (commentList.scrollTop + commentList.clientHeight === commentList.scrollHeight);

    // Réinitialise la liste des commentaires
    commentList.innerHTML = '';

    // Re peuple les commentaires du tableau
    for(var i = 2; i < listOfNewCommLength + 2; i++)
    {
        // Mets en cache
        var userCell = listOfNewComments[i].firstElementChild;

        // Retire l'image
        userCell.firstElementChild.remove();

        // Ajoute les options utilisateur
        var id = userCell.firstElementChild.getAttribute('href').substr(6);
        var userName = userCell.firstElementChild.textContent;
        userCell.appendChild(createUserOptionsIcon(id, userName));

        // Ajoute le commentaire
        commentList.appendChild(listOfNewComments[i]);
    }

    // Met à jour les informations de la page
    page.commentNumber = listOfNewCommLength;

{'fraction_non_alphanumeric': 0.0969227041434456, 'fraction_numerical': 0.004482675066634359, 'mean_word_length': 3.0765432098765433, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4857931', 'n_tokens_mistral': 2371, 'n_tokens_neox': 2309, 'n_words': 599}