瀏覽代碼

fix: separate dict to solve cyclic dependency

Weihua Lu 4 年之前
父節點
當前提交
5e081ed91c

+ 14 - 0
src/main/frontend/components/commit.cljs

@@ -1,6 +1,7 @@
 (ns frontend.components.commit
   (:require [rum.core :as rum]
             [frontend.util :as util :refer-macros [profile]]
+            [clojure.string :as string]
             [frontend.handler.repo :as repo-handler]
             [frontend.state :as state]
             [frontend.mixins :as mixins]
@@ -53,3 +54,16 @@
         {:type "button"
          :on-click close-fn}
         "Cancel"]]]]))
+
+(defn show-commit-modal! [e]
+  (when (and
+         (string/starts-with? (state/get-current-repo) "https://")
+         (not (util/input? (gobj/get e "target")))
+         (not (gobj/get e "shiftKey"))
+         (not (gobj/get e "ctrlKey"))
+         (not (gobj/get e "altKey"))
+         (not (gobj/get e "metaKey")))
+    (when-let [repo-url (state/get-current-repo)]
+      (when-not (state/get-edit-input-id)
+        (util/stop e)
+        (state/set-modal! commit-and-push!)))))

+ 2 - 2
src/main/frontend/components/shortcut.cljs

@@ -18,9 +18,9 @@
           [:th [:b (t name)]]
           [:th (t :help/shortcut)]]]
         [:tbody
-         (map (fn [[k {:keys [i18n binding]}]]
+         (map (fn [[k {:keys [binding]}]]
                 [:tr {:key k}
-                 [:td (t i18n)]
+                 [:td (t (dh/decorate-namespace k))]
                  [:td binding]])
               (dh/binding-by-category name))]]])))
 

+ 4 - 1
src/main/frontend/context/i18n.cljs

@@ -1,6 +1,8 @@
 (ns frontend.context.i18n
   (:require [frontend.dicts :as dicts]
+            [frontend.modules.shortcut.dict :as shortcut-dict]
             [rum.core :as rum]
+            [medley.core :refer [deep-merge]]
             [frontend.state :as state]))
 
 ;; TODO
@@ -18,7 +20,8 @@
 (rum/defc tongue-provider [children]
   (let [prefered-language (keyword (state/sub :preferred-language))
         set-preferred-language state/set-preferred-language!
-        t (partial dicts/translate prefered-language)]
+        all-dicts (deep-merge dicts/dicts shortcut-dict/dict)
+        t (partial (dicts/translate all-dicts) prefered-language)]
     (if (nil? prefered-language)
       (set-preferred-language (fetch-local-language))
       :ok)

+ 1 - 18
src/main/frontend/handler/git.cljs

@@ -10,9 +10,7 @@
             [frontend.handler.route :as route-handler]
             [frontend.handler.common :as common-handler]
             [frontend.config :as config]
-            [cljs-time.local :as tl]
-            [clojure.string :as string]
-            [goog.object :as gobj]))
+            [cljs-time.local :as tl]))
 
 (defn- set-git-status!
   [repo-url value]
@@ -63,18 +61,3 @@
      (config/get-repo-dir repo-url)
      name
      email)))
-
-(defn show-commit-modal!
-  [modal]
-  (fn [e]
-    (when (and
-          (string/starts-with? (state/get-current-repo) "https://")
-          (not (util/input? (gobj/get e "target")))
-          (not (gobj/get e "shiftKey"))
-          (not (gobj/get e "ctrlKey"))
-          (not (gobj/get e "altKey"))
-          (not (gobj/get e "metaKey")))
-     (when-let [repo-url (state/get-current-repo)]
-       (when-not (state/get-edit-input-id)
-         (util/stop e)
-         (state/set-modal! modal))))))

+ 15 - 7
src/main/frontend/modules/shortcut/config.cljs

@@ -1,14 +1,15 @@
 (ns frontend.modules.shortcut.config
-  (:require [frontend.handler.config :as config-handler]
+  (:require [frontend.components.commit :as commit]
+            [frontend.handler.config :as config-handler]
             [frontend.handler.editor :as editor-handler]
-            [frontend.components.commit :as git-handler]
+            [frontend.handler.history :as history]
             [frontend.handler.repo :as repo-handler]
             [frontend.handler.route :as route-handler]
             [frontend.handler.search :as search-handler]
             [frontend.handler.ui :as ui-handler]
             [frontend.handler.web.nfs :as nfs-handler]
-            [frontend.state :as state]
             [frontend.modules.shortcut.before :as m]
+            [frontend.state :as state]
             [frontend.util :refer [mac?]]))
 
 (def default-config
@@ -238,7 +239,7 @@
      :binding "mod+shift+u"
      :fn      #(route-handler/go-to-search! :page)}
     :go/search
-    {:desc  "Full text search"
+    {:desc    "Full text search"
      :binding "mod+u"
      :fn      route-handler/go-to-search!}
     :go/journals
@@ -300,12 +301,13 @@
     :git/commit
     {:desc    "Git commit message"
      :binding "g c"
-     :fn      git-handler/show-commit-modal!}}})
+     :fn      commit/show-commit-modal!}}})
 
 
 ;; Categories for docs purpose
 (def category
   {:shortcut.category/basics
+   ^{:doc "Basics"}
    [:editor/new-block
     :editor/new-line
     :editor/indent
@@ -322,18 +324,21 @@
     :editor/cut]
 
    :shortcut.category/formatting
+   ^{:doc "Formatting"}
    [:editor/bold
     :editor/insert-link
     :editor/italics
     :editor/highlight]
 
    :shortcut.category/navigating
+   ^{:doc "Navigation"}
    [:editor/up
     :editor/down
     :editor/left
     :editor/right]
 
    :shortcut.category/block-editing
+   ^{:doc "Block editing general"}
    [:editor/backspace
     :editor/delete
     :editor/indent
@@ -350,6 +355,7 @@
     :editor/move-block-down]
 
    :shortcut.category/block-command-editing
+   ^{:doc "Block command editing"}
    [:editor/backspace
     :editor/clear-block
     :editor/kill-line-before
@@ -362,12 +368,14 @@
     :editor/backward-kill-word]
 
    :shortcut.category/block-selection
+   ^{:doc "Block selection (press Esc to quit selection)"}
    [:editor/open-edit
     :editor/select-block-up
     :editor/select-block-down
     :editor/delete-selection]
 
    :shortcut.category/toggle
+   ^{:doc "Toggle"}
    [:ui/toggle-help
     :ui/toggle-new-block
     :ui/toggle-wide-mode
@@ -379,7 +387,7 @@
     :ui/toggle-contents]
 
    :shortcut.category/others
+   ^{:doc "Others"}
    [:go/journals
     :search/re-index
-    :graph/re-index]
-   })
+    :graph/re-index]})

+ 14 - 14
src/main/frontend/modules/shortcut/data_helper.cljs

@@ -4,8 +4,6 @@
             [frontend.util :as util]
             [clojure.string :as str]
             [frontend.state :as state]))
-
-
 (defn binding-map []
   (->> (vals config/default-config)
        (apply merge)
@@ -63,18 +61,20 @@
                            (assoc r k (before v)))
                          {})))))
 
-(defn- decorate-namespace [k]
+(defn decorate-namespace [k]
   (let [n (name k)
         ns (namespace k)]
     (keyword (str "shortcut." ns) n)))
-(defn shortcut-dict
-  "All docs for EN are generated from :desc field of shortcut default-config map.
-  For all other languages, need manual translation in dict file.
-  Eg: editor/insert-link would be shortcut.editor/insert-link in dict file"
-  []
-  {:en
-   (->> (vals config/default-config)
-        (apply merge)
-        (map (fn [[k {:keys [desc]}]]
-               {(decorate-namespace k) desc}))
-        (into {}))})
+
+(defn desc-helper []
+  (->> (vals config/default-config)
+       (apply merge)
+       (map (fn [[k {:keys [desc]}]]
+              {(decorate-namespace k) desc}))
+       (into {})))
+
+(defn category-helper []
+  (->> config/category
+       (map (fn [[k v]]
+              {k (:doc (meta v))}))
+       (into {})))

+ 10 - 0
src/main/frontend/modules/shortcut/macro.clj

@@ -0,0 +1,10 @@
+(ns frontend.modules.shortcut.macro)
+
+(defmacro shortcut-dict
+  "All docs for EN are generated from :desc field of shortcut default-config map.
+  For all other languages, need manual translation in dict file. "
+  [desc category & maps]
+  `(medley.core/deep-merge
+    {:en ~category}
+    {:en ~desc}
+    ~@maps))