From 42f598ae13152f56e48804b16b3be208d716f5e5 Mon Sep 17 00:00:00 2001 From: Matthieu Marcillaud <marcimat@rezo.net> Date: Sat, 15 May 2021 22:48:36 +0200 Subject: [PATCH] =?UTF-8?q?Une=20fonction=20beaucoup=20plus=20=C3=A0=20jou?= =?UTF-8?q?r=20pour=20ajouter=20du=20contenu=20=C3=A0=20un=20textarea?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prive/javascript/spip_barre.js | 81 +++++----------------------------- 1 file changed, 11 insertions(+), 70 deletions(-) diff --git a/prive/javascript/spip_barre.js b/prive/javascript/spip_barre.js index ab65c6d366..de2114d94b 100644 --- a/prive/javascript/spip_barre.js +++ b/prive/javascript/spip_barre.js @@ -1,71 +1,12 @@ // Barre de raccourcis - -function barre_inserer(text,champ) { - var txtarea = champ; - if( document.selection ){ - txtarea.focus(); - var r = document.selection.createRange(); - if (r == null) { - txtarea.selectionStart = txtarea.value.length; - txtarea.selectionEnd = txtarea.selectionStart; - } - else { - var re = txtarea.createTextRange(); - var rc = re.duplicate(); - re.moveToBookmark(r.getBookmark()); - rc.setEndPoint('EndToStart', re); - txtarea.selectionStart = rc.text.length; - txtarea.selectionEnd = rc.text.length + r.text.length; - } - } - mozWrap(txtarea, '', text); -} - - -function setSelectionRange(input, selectionStart, selectionEnd) { - if (input.setSelectionRange) { - input.focus(); - input.setSelectionRange(selectionStart, selectionEnd); - } - else if (input.createTextRange) { - var range = input.createTextRange(); - range.collapse(true); - range.moveEnd('character', selectionEnd); - range.moveStart('character', selectionStart); - range.select(); - } -} - -// From http://www.massless.org/mozedit/ -function mozWrap(txtarea, open, close) -{ - var selLength = txtarea.textLength; - var selStart = txtarea.selectionStart; - var selEnd = txtarea.selectionEnd; - if (selEnd == 1 || selEnd == 2) - selEnd = selLength; - var selTop = txtarea.scrollTop; - - // Raccourcir la selection par double-clic si dernier caractere est espace - if (selEnd - selStart > 0 && (txtarea.value).substring(selEnd-1,selEnd) == ' ') selEnd = selEnd-1; - - var s1 = (txtarea.value).substring(0,selStart); - var s2 = (txtarea.value).substring(selStart, selEnd) - var s3 = (txtarea.value).substring(selEnd, selLength); - - // Eviter melange bold-italic-intertitre - if ((txtarea.value).substring(selEnd,selEnd+1) == '}' && close.substring(0,1) == "}") close = close + " "; - if ((txtarea.value).substring(selEnd-1,selEnd) == '}' && close.substring(0,1) == "}") close = " " + close; - if ((txtarea.value).substring(selStart-1,selStart) == '{' && open.substring(0,1) == "{") open = " " + open; - if ((txtarea.value).substring(selStart,selStart+1) == '{' && open.substring(0,1) == "{") open = open + " "; - - txtarea.value = s1 + open + s2 + close + s3; - selDeb = selStart + open.length; - selFin = selEnd + close.length; - window.setSelectionRange(txtarea, selDeb, selFin); - txtarea.scrollTop = selTop; - txtarea.focus(); - - return; -} - +function barre_inserer(text, el = document.activeElement) { + const [start, end] = [el.selectionStart, el.selectionEnd]; + // remplace la sélection (ou curseur) par le contenu demandé + el.setRangeText(text, start, end, 'select'); + // place le curseur à la fin (désélectionne) + const new_caret_pos = start + text.length; + el.setSelectionRange(new_caret_pos, new_caret_pos); + el.focus(); + // trigger une saisie clavier + el.dispatchEvent(new Event('input')); +} \ No newline at end of file -- GitLab