浏览代码

fix(mobile): can't copy to clipboard

Tienson Qin 2 月之前
父节点
当前提交
63e4948f7d
共有 3 个文件被更改,包括 16 次插入12 次删除
  1. 3 0
      externs/app.txt
  2. 13 3
      src/main/frontend/util.cljc
  3. 0 9
      src/main/frontend/utils.js

+ 3 - 0
externs/app.txt

@@ -84,3 +84,6 @@ setOption
 string
 dispose
 path
+Capacitor
+Clipboard
+clipboard

+ 13 - 3
src/main/frontend/util.cljc

@@ -6,6 +6,8 @@
             ["/frontend/selection" :as selection]
             ["/frontend/utils" :as utils]
             ["@capacitor/status-bar" :refer [^js StatusBar Style]]
+            ["@capacitor/core" :refer [Capacitor]]
+            ["@capacitor/clipboard" :as CapacitorClipboard]
             ["grapheme-splitter" :as GraphemeSplitter]
             ["sanitize-filename" :as sanitizeFilename]
             ["check-password-strength" :refer [passwordStrength]]
@@ -96,7 +98,7 @@
      ([] (some-> (js/document.querySelector ".app-silk-index-scroll-content") (.-parentNode)))
      ([el] (if el
              (some-> (or (.closest el ".app-silk-scroll-content")
-                       (.closest el ".app-silk-index-scroll-content")) (.-parentNode))
+                         (.closest el ".app-silk-index-scroll-content")) (.-parentNode))
              (mobile-page-scroll)))))
 
 #?(:cljs (defn app-scroll-container-node
@@ -777,6 +779,14 @@
 
 #?(:cljs (def clear-selection! selection/clearSelection))
 
+#?(:cljs
+   (defn write-clipboard
+     ([data] (write-clipboard data nil))
+     ([data owner-window]
+      (if (.isNativePlatform ^js Capacitor)
+        (.write (gobj/get CapacitorClipboard "Clipboard") #js {:string (gobj/get data "text")})
+        (utils/writeClipboard data owner-window)))))
+
 #?(:cljs
    (defn copy-to-clipboard!
      [text & {:keys [graph html blocks embed-block? owner-window]}]
@@ -795,8 +805,8 @@
                                :embed-block? embed-block?
                                :blocks (mapv #(dissoc % :block.temp/load-status %) blocks)}))}))]
        (if owner-window
-         (utils/writeClipboard data owner-window)
-         (utils/writeClipboard data)))))
+         (write-clipboard data owner-window)
+         (write-clipboard data)))))
 
 (defn drop-nth [n coll]
   (keep-indexed #(when (not= %1 n) %2) coll))

+ 0 - 9
src/main/frontend/utils.js

@@ -1,9 +1,5 @@
 import path from 'path'
 
-// TODO split the capacitor abilities to a separate file for capacitor APIs
-import { Capacitor } from '@capacitor/core'
-import { Clipboard as CapacitorClipboard } from '@capacitor/clipboard'
-
 if (typeof window === 'undefined') {
   global.window = {}
 }
@@ -265,11 +261,6 @@ export const getClipText = (cb, errorHandler) => {
 }
 
 export const writeClipboard = ({text, html, blocks}, ownerWindow) => {
-    if (Capacitor.isNativePlatform()) {
-        CapacitorClipboard.write({ string: text });
-        return
-    }
-
     const navigator = (ownerWindow || window).navigator
 
     navigator.permissions.query({