Bladeren bron

feat: find-in-page add results

Tienson Qin 3 jaren geleden
bovenliggende
commit
b677d6f819

+ 8 - 2
src/electron/electron/find_in_page.cljs

@@ -1,10 +1,16 @@
 (ns electron.find-in-page
-  (:require [electron.window :as win]))
+  (:require [electron.utils :as utils]
+            [cljs-bean.core :as bean]))
 
 (defn find!
   [^js window search option]
   (when window
-    (.findInPage ^js (.-webContents window) search option)))
+    (let [contents ^js (.-webContents window)]
+      (.findInPage contents search option)
+      (.on contents "found-in-page"
+           (fn [_event result]
+             (utils/send-to-renderer window "foundInPage" (bean/->clj result))))
+      true)))
 
 (defn clear!
   [^js window]

+ 0 - 4
src/electron/electron/window.cljs

@@ -159,7 +159,3 @@
         (.off win "enter-full-screen")
         (.off win "leave-full-screen")))
     #()))
-
-(defn get-active-window
-  []
-  (.getFocusedWindow BrowserWindow))

+ 6 - 0
src/main/electron/listener.cljs

@@ -124,6 +124,12 @@
                                        :on-error   error-f}]
                          (repo-handler/persist-db! repo handlers))))
 
+  (js/window.apis.on "foundInPage"
+                     (fn [data]
+                       (let [data' (bean/->clj data)]
+                         (state/set-state! [:ui/find-in-search :matches] data')
+                         true)))
+
   (js/window.apis.on "loginCallback"
                      (fn [code]
                        (user/login-callback code)))

+ 10 - 3
src/main/frontend/components/find_in_page.cljs

@@ -42,8 +42,8 @@
       :node (gdom/getElement "search-in-page")
       :on-hide (fn []
                  (search-handler/electron-exit-find-in-page!)))))
-  [{:keys [q backward?]}]
-  [:div#search-in-page.flex.flex-row.absolute.top-2.right-4.shadow-lg.px-2.py-1.faster-fade-in
+  [{:keys [matches]}]
+  [:div#search-in-page.flex.flex-row.absolute.top-2.right-4.shadow-lg.px-2.py-1.faster-fade-in.items-center
    [:div.flex
     [:input#search-in-page-input.form-input.block.w-48.sm:text-sm.sm:leading-5.my-2.border-none.mr-4.outline-none
      {:auto-focus true
@@ -51,7 +51,14 @@
       :on-change (fn [e]
                    (let [value (util/evalue e)]
                      (state/set-state! [:ui/find-in-search :q] value)
-                     (debounced-search)))}]]
+                     (if (string/blank? value)
+                       (search-handler/electron-exit-find-in-page!)
+                       (debounced-search))))}]]
+   [:div.px-4.text-sm.opacity-80
+    (:activeMatchOrdinal matches 0)
+    "/"
+    (:matches matches 0)]
+
    (ui/button
      (ui/icon "caret-up" {:style {:font-size 18}})
      :on-click (fn []