From 6b9ed0c5a3d1156acac68d355fd4d1b329dd976d Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 5 May 2020 08:43:05 +0200 Subject: [PATCH] :sparkles: Autoselect all text on enter edition mode. --- .../src/uxbox/main/data/workspace/texts.cljs | 17 +++++++++++++---- frontend/src/uxbox/main/ui/shapes/text.cljs | 5 +++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/frontend/src/uxbox/main/data/workspace/texts.cljs b/frontend/src/uxbox/main/data/workspace/texts.cljs index 52a91d3b9..5c7fb03e0 100644 --- a/frontend/src/uxbox/main/data/workspace/texts.cljs +++ b/frontend/src/uxbox/main/data/workspace/texts.cljs @@ -17,7 +17,7 @@ [uxbox.main.fonts :as fonts] [uxbox.main.data.workspace.common :as dwc] ["slate-react" :as rslate] - ["slate" :as slate :refer [Editor Transforms Text]])) + ["slate" :as slate :refer [Editor Node Transforms Text]])) (defn create-editor [] @@ -36,12 +36,21 @@ (defn- calculate-full-selection [editor] - (let [children (obj/get editor "children") - paragraphs (obj/get-in children [0 "children" 0 "children"])] + (let [children (obj/get editor "children") + paragraphs (obj/get-in children [0 "children" 0 "children"]) + lastp (aget paragraphs (dec (alength paragraphs))) + lastptxt (.string Node lastp)] #js {:anchor #js {:path #js [0 0 0] :offset 0} :focus #js {:path #js [0 0 (dec (alength paragraphs))] - :offset 1}})) + :offset (alength lastptxt)}})) + +(defn- editor-select-all! + [editor] + (let [children (obj/get editor "children") + paragraphs (obj/get-in children [0 "children" 0 "children"]) + range (calculate-full-selection editor)] + (.select Transforms editor range))) (defn- editor-set! ([editor props] diff --git a/frontend/src/uxbox/main/ui/shapes/text.cljs b/frontend/src/uxbox/main/ui/shapes/text.cljs index f0f12b4a9..4bdeecfec 100644 --- a/frontend/src/uxbox/main/ui/shapes/text.cljs +++ b/frontend/src/uxbox/main/ui/shapes/text.cljs @@ -273,6 +273,10 @@ (events/unlistenByKey lkey1) (events/unlistenByKey lkey2)))) + on-focus + (fn [event] + (dwt/editor-select-all! editor)) + on-change (mf/use-callback (fn [val] @@ -291,6 +295,7 @@ [:> rslate/Editable {:auto-focus "true" :spell-check "false" + :on-focus on-focus :class "rich-text" :render-element render-element :render-leaf render-text