Page 1 sur 1

Tab-autocompletion sur le chat

Message non luPosté: 26 Mar 2015, 03:09
de Adriweb
Nouvelle petite fonctionnalité sur le chat (shootbox et pleine page):

Comme sur beaucoup de logiciels de chat, vous pouvez désormais appuyer sur la touche
tab
de votre clavier pour autocompléter les noms des personnes présentes sur le chat dont vous tapez le début. (Le code est simpliste et ne prendra en compte que la 1ère occurence trouvée)

Si ça ne semble pas marcher pour vous, videz le cache de votre navigateur puis retentez.

Pour les curieux:
Show/Hide spoilerAfficher/Masquer le spoiler
Code: Tout sélectionner
ajaxChat.tabAutoComplete = function(a) {
    if (9 == a.keyCode) {
        var inputID = document.getElementById("inputField") ? "inputField" : "ajaxChatInputField";
        var wordBeforeTab = getWordBeforeCursor(inputID).trim();
        if (wordBeforeTab.length) {
            var completion = ajaxChat.userNamesList.filter(/./.test.bind(new RegExp("^" + wordBeforeTab, 'i')))[0];
            if (completion !== undefined) insertAtCaret(inputID, completion.substr(wordBeforeTab.length) + ' ');
        }
        try{a.preventDefault()}catch(b){a.returnValue=!1} return false;
    }
};

Et les helpers (merci StackOverflow, comme d'hab):
Code: Tout sélectionner
function GetCaretPosition(ctrl) {
    var CaretPos = 0; // IE Support
    if (document.selection) {
        ctrl.focus();
        var Sel = document.selection.createRange();
        Sel.moveStart('character', -ctrl.value.length);
        CaretPos = Sel.text.length;
    }
    // Firefox support
    else if (ctrl.selectionStart || ctrl.selectionStart == '0')
        CaretPos = ctrl.selectionStart;
    return (CaretPos);
}

function ReturnWord(text, caretPos) {
    var index = text.indexOf(caretPos);
    var preText = text.substring(0, caretPos);
    if (preText.indexOf(" ") > 0) {
        var words = preText.split(" ");
        return words[words.length - 1]; //return last word
    } else {
        return preText;
    }
}

function getWordBeforeCursor(el) {
    var text = document.getElementById(el);
    var caretPos = GetCaretPosition(text);
    return ReturnWord(text.value, caretPos);
}

function insertAtCaret(areaId, text) {
    var txtarea = document.getElementById(areaId);
    var scrollPos = txtarea.scrollTop;
    var strPos = 0;
    var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ?
        "ff" : (document.selection ? "ie" : false));
    if (br == "ie") {
        txtarea.focus();
        var range = document.selection.createRange();
        range.moveStart('character', -txtarea.value.length);
        strPos = range.text.length;
    } else if (br == "ff") strPos = txtarea.selectionStart;

    var front = (txtarea.value).substring(0, strPos);
    var back = (txtarea.value).substring(strPos, txtarea.value.length);
    txtarea.value = front + text + back;
    strPos = strPos + text.length;
    if (br == "ie") {
        txtarea.focus();
        var range = document.selection.createRange();
        range.moveStart('character', -txtarea.value.length);
        range.moveStart('character', strPos);
        range.moveEnd('character', 0);
        range.select();
    } else if (br == "ff") {
        txtarea.selectionStart = strPos;
        txtarea.selectionEnd = strPos;
        txtarea.focus();
    }
    txtarea.scrollTop = scrollPos;
}

Re: Tab-autocompletion sur le chat

Message non luPosté: 26 Mar 2015, 15:48
de Hamza.S
ça marche d'enfer

Re: Tab-autocompletion sur le chat

Message non luPosté: 26 Mar 2015, 16:59
de Victor D
Oui, mais bon le plus simple c'est de cliquer sur le pseudo lorsque cette personne parle, mais bon il est vrai que cette nouveauté est pratique pour les personnes qui restent muettes alors quelles sont tout de même connecté au chat ;)

Et c'est d'autant plus pratique sur le petit chat ;)

Donc merci et bravo :bj: