Tab-autocompletion sur le chat
Posted: 26 Mar 2015, 03:09
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
Si ça ne semble pas marcher pour vous, videz le cache de votre navigateur puis retentez.
Pour les curieux:
Et les helpers (merci StackOverflow, comme d'hab):
Comme sur beaucoup de logiciels de chat, vous pouvez désormais appuyer sur la touche
tabde 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: Select all
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: Select all
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;
}