Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Améliore le comportement du bouton "Citer" #4711

Merged
merged 2 commits into from
Oct 16, 2017

Conversation

rezemika
Copy link
Contributor

@rezemika rezemika commented Oct 8, 2017

L'ancien comportement consistait à insérer la citation à la fin du message, suivie de deux sauts de ligne.

Ce commit fait en sorte que la citation soit maintenant insérée à la position courante du curseur, afin de pouvoir la placer au milieu du message (entre deux paragraphes par exemple).

Numéro du ticket concerné (optionnel) : Aucun

Contrôle qualité

  • Reconstruire le front ;
  • Vérifier que le bouton "Citer" se comporte correctement dans plusieurs cas de figure (sans le focus, entre deux paragraphes, etc).

N'hésitez pas à me signaler si vous préférez le comportement actuel. Je fais cette PR surtout parce que j'ai souvent tendance à rédiger une réponse et à vouloir insérer des citations ensuite (qui du coup se rajoutent à la fin du message).

L'ancien comportement consistait à insérer la citation à la fin du message, suivie de deux sauts de ligne.

Ce commit fait en sorte que la citation soit maintenant insérée à la position courante du curseur, afin de pouvoir la placer au milieu du message (entre deux paragraphes par exemple).
@motet-a motet-a added the C-Front Concerne l'interface du site label Oct 8, 2017
@gllmc
Copy link
Member

gllmc commented Oct 11, 2017

Ça marche assez bien chez moi, mais si on a le curseur au milieu d'un mot ou d'une phrase, la citation s'y insère, ce qui n'a aucun sens. Ce serait bien de gérer ça. ^^

@motet-a
Copy link
Contributor

motet-a commented Oct 15, 2017

Pour gérer ça :

diff --git a/assets/js/ajax-actions.js b/assets/js/ajax-actions.js
index 0356a91db..c0806e612 100644
--- a/assets/js/ajax-actions.js
+++ b/assets/js/ajax-actions.js
@@ -194,31 +194,45 @@
         }
     });
 
+    function getLineAt(string, index) {
+        var before = string.slice(0, index).split("\n").slice(-1)[0] || "";
+        var after = string.slice(index).split("\n")[0] || "";
+        return before + after;
+    }
+
+    function insertCitation(editor, citation) {
+        if (editor.selectionStart !== editor.selectionEnd ||
+            getLineAt(editor.value, editor.selectionStart).trim()) {
+            editor.value = editor.value + "\n\n" + citation;
+            return;
+        }
+
+        var before = editor.value.slice(0, editor.selectionStart);
+        var after = editor.value.slice(editor.selectionEnd);
+        editor.value = before + "\n" + citation + "\n" + after;
+    }
+
     /**
      * Cite a message
      */
     $(".message-actions").on("click", "[data-ajax-input='cite-message']", function(e){
-        var $act = $(this),
-            $editor = $(".md-editor");
+        e.stopPropagation();
+        e.preventDefault();
+
+        var $act = $(this);
+        var editor = document.querySelector(".md-editor");
 
         $.ajax({
             url: $act.attr("href"),
             dataType: "json",
             success: function(data){
-                var selStart = $editor[0].selectionStart;
-                var selEnd = $editor[0].selectionEnd;
-                $editor.val($editor.val().slice(0, selStart) + data.text + "\n\n" + $editor.val().slice(selEnd));
-                var caretPos = selEnd + data.text.length + 2;
-                $editor[0].setSelectionRange(caretPos, caretPos);
+                insertCitation(editor, data.text);
             }
         });
 
         // scroll to the textarea and focus the textarea
-        $("html, body").animate({ scrollTop: $editor.offset().top }, 500);
-        $editor.focus();
-
-        e.stopPropagation();
-        e.preventDefault();
+        $("html, body").animate({ scrollTop: $(editor).offset().top }, 500);
+        editor.focus();
     });
 
     /**

@rezemika
Copy link
Contributor Author

Mince, désolé de vous avoir oublié, j'avais ouvert la notification et l'onglet s'est perdu parmi les autres. Je m'en occupe de suite.

@artragis
Copy link
Member

Je laisse @motet-a valider avant de merger.

Copy link
Member

@gllmc gllmc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

QA OK. Mergeable après code review de @motet-a et rebase.

Copy link
Contributor

@motet-a motet-a left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@artragis artragis merged commit 886b0c6 into zestedesavoir:dev Oct 16, 2017
@artragis artragis added this to the Version de développement milestone Oct 16, 2017
@rezemika rezemika deleted the improve-quoting branch October 16, 2017 16:50
rezemika added a commit to rezemika/zds-site that referenced this pull request Jan 28, 2018
Depuis zestedesavoir#4711, le bouton "Citer" insère une ligne vide suivie de la citation, même quand la boite d'édition est vide. Avant, la citation était ajoutée au début du message et était suivie de deux sauts de lignes.
Ce commit restaure ce comportement quand la boite d'édition est vide.
artragis pushed a commit that referenced this pull request Jan 29, 2018
Depuis #4711, le bouton "Citer" insère une ligne vide suivie de la citation, même quand la boite d'édition est vide. Avant, la citation était ajoutée au début du message et était suivie de deux sauts de lignes.
Ce commit restaure ce comportement quand la boite d'édition est vide.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-Front Concerne l'interface du site
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants