Browse Source

Merge pull request #4104 from logseq/feature/add-more-graph-commands

Add graph removal and add commands
Gabriel Horner 3 years ago
parent
commit
165a563f96

+ 0 - 1
.clj-kondo/config.edn

@@ -22,7 +22,6 @@
            garden.def/defstyles clojure.core/def
            garden.def/defkeyframes clojure.core/def
            rum.core/defcc rum.core/defc
-           rum.core/with-context clojure.core/doseq
            rum.core/defcontext clojure.core/def
            clojure.test.check.clojure-test/defspec clojure.core/def
            clojure.test.check.properties/for-all clojure.core/for

+ 2 - 2
.github/workflows/build.yml

@@ -103,8 +103,8 @@ jobs:
       - name: Carve lint for unused vars
         run: scripts/carve.clj
 
-      - name: Lint invalid dictionary keys
-        run: bb lang:invalid-dicts
+      - name: Lint invalid translation entries
+        run: bb lang:invalid-translations
 
   e2e-test:
     runs-on: ubuntu-latest

+ 2 - 2
bb.edn

@@ -23,5 +23,5 @@
   lang:duplicates
   logseq.tasks.lang/list-duplicates
 
-  lang:invalid-dicts
-  logseq.tasks.lang/invalid-dicts}}
+  lang:invalid-translations
+  logseq.tasks.lang/invalid-translations}}

+ 12 - 15
docs/contributing-to-translations.md

@@ -29,24 +29,23 @@ language has compared to others:
 ```sh
 $ bb lang:list
 
+
 |  :locale | :percent-translated | :translation-count |              :language |
 |----------+---------------------+--------------------+------------------------|
-|      :en |                 100 |                383 |                English |
-|   :nb-NO |                  99 |                381 |         Norsk (bokmål) |
-|   :zh-CN |                  96 |                367 |                   简体中文 |
-|      :ru |                  94 |                359 |                Русский |
-|   :pt-BR |                  83 |                319 | Português (Brasileiro) |
-|   :pt-PT |                  81 |                310 |    Português (Europeu) |
-|      :es |                  75 |                286 |                Español |
-| :zh-Hant |                  65 |                250 |                   繁體中文 |
-|      :af |                  60 |                230 |              Afrikaans |
-|      :de |                  56 |                215 |                Deutsch |
-|      :fr |                  45 |                172 |               Français |
+|      :en |                 100 |                494 |                English |
+|   :nb-NO |                  90 |                445 |         Norsk (bokmål) |
+|   :zh-CN |                  87 |                432 |                   简体中文 |
+|      :ru |                  85 |                422 |                Русский |
+|   :pt-BR |                  77 |                382 | Português (Brasileiro) |
+|   :pt-PT |                  76 |                373 |    Português (Europeu) |
+|      :es |                  71 |                349 |                Español |
+| :zh-Hant |                  55 |                272 |                   繁體中文 |
+|      :af |                  51 |                253 |              Afrikaans |
+|      :de |                  48 |                238 |                Deutsch |
+|      :fr |                  39 |                195 |               Français |
 Total: 11
 ```
 
-_Note_: This is only showing `frontend/dicts.cljs` translations for now.
-
 Let's try to get your language translated as close to 100% as you can!
 
 ## Edit a Language
@@ -66,8 +65,6 @@ $ bb lang:missing
 ...
 ```
 
-_Note_: This is only showing `frontend/dicts.cljs` translations for now.
-
 Now, add keys for your language, save and rerun the above command. Over time
 you're hoping to have this list drop to zero.
 

+ 73 - 31
scripts/src/logseq/tasks/lang.clj

@@ -1,33 +1,68 @@
 (ns logseq.tasks.lang
   "Tasks related to language translations"
-  (:require [logseq.rewrite-clj :as rewrite-clj]
+  (:require [logseq.tasks.rewrite-clj :as rewrite-clj]
             [clojure.set :as set]
             [logseq.tasks.util :as task-util]))
 
 (defn- get-dicts
   []
-  (dissoc (rewrite-clj/var-sexp ["dicts" "src/main/frontend/dicts.cljs"])
+  (dissoc (rewrite-clj/var-sexp "src/main/frontend/dicts.cljs" "dicts")
           :tongue/fallback))
 
+(defn- get-non-en-shortcuts
+  []
+  (nth (rewrite-clj/var-sexp "src/main/frontend/modules/shortcut/dict.cljs" "dict")
+       3))
+
+;; unnecessary complexity :(
+(defn- decorate-namespace [k]
+  (let [n (name k)
+        ns (namespace k)]
+    (keyword (str "command." ns) n)))
+
+(defn- get-en-shortcut-dicts
+  []
+  (->> (rewrite-clj/var-sexp
+        "src/main/frontend/modules/shortcut/config.cljs"
+        "all-default-keyboard-shortcuts")
+       (map (fn [[k v]] (vector (decorate-namespace k) (:desc v))))
+       (into {})))
+
+(defn- get-en-categories
+  []
+  (->> (rewrite-clj/var-sexp
+        "src/main/frontend/modules/shortcut/config.cljs"
+        "category")
+       (map (fn [[k v]] (vector k (:doc (meta v)))))
+       (into {})))
+
+(defn- get-shortcuts
+  []
+  (merge {:en (merge (get-en-categories)
+                     (get-en-shortcut-dicts))}
+         (get-non-en-shortcuts)))
+
 (defn- get-languages
   []
-  (rewrite-clj/var-sexp ["languages" "src/main/frontend/dicts.cljs"]))
+  (->> (rewrite-clj/var-sexp "src/main/frontend/dicts.cljs" "languages")
+       (map (juxt :value :label))
+       (into {})))
 
 (defn list-langs
   "List translated langagues with their number of translations"
   []
-  (let [dicts (get-dicts)
+  (let [dicts (merge-with merge (get-dicts) (get-shortcuts))
         en-count (count (dicts :en))
-        langs (into {} (map (juxt :value :label) (get-languages)))]
+        langs (get-languages)]
     (->> dicts
-         (map (fn [[locale dicts]]
-                [locale
-                 (Math/round (* 100.0 (/ (count dicts) en-count)))
-                 (count dicts)
-                 (langs locale)]))
-         (sort-by #(nth % 2) >)
-         (map #(zipmap [:locale :percent-translated :translation-count :language] %))
-         task-util/print-table)))
+           (map (fn [[locale dicts]]
+                  [locale
+                   (Math/round (* 100.0 (/ (count dicts) en-count)))
+                   (count dicts)
+                   (langs locale)]))
+           (sort-by #(nth % 2) >)
+           (map #(zipmap [:locale :percent-translated :translation-count :language] %))
+           task-util/print-table)))
 
 (defn- shorten [s length]
   (if (< (count s) length)
@@ -39,27 +74,34 @@
   [& args]
   (let [lang (or (keyword (first args))
                  (task-util/print-usage "LOCALE"))
-        dicts (get-dicts)
-        translated-language (dicts lang)
-        _ (when-not translated-language
+        _ (when-not (contains? (get-languages) lang)
             (println "Language" lang "does not have an entry in dicts.cljs")
             (System/exit 1))
-        missing (set/difference (set (keys (dicts :en)))
-                                (set (keys translated-language)))]
-    (if (zero? (count missing))
+        all-dicts [[(get-dicts) "frontend/dicts.cljs"]
+                   [(get-shortcuts) "shortcut/dict.cljs"]]
+        all-missing (map (fn [[dicts file]]
+                           [(select-keys (dicts :en)
+                                         (set/difference (set (keys (dicts :en)))
+                                                         (set (keys (dicts lang)))))
+                            file])
+                         all-dicts)]
+    (if (every? (comp zero? count first) all-missing)
       (println "Language" lang "is fully translated!")
-      (->> (select-keys (dicts :en) missing)
-           (map (fn [[k v]]
-                  {:translation-key k
-                   ;; Shorten values
-                   :string-to-translate (shorten v 50)}))
-           (sort-by :translation-key)
+      (->> all-missing
+           (mapcat (fn [[m file]]
+                     (map (fn [[k v]]
+                            {:translation-key k
+                             ;; Shorten values
+                             :string-to-translate (shorten v 50)
+                             :file file})
+                          m)))
+           (sort-by (juxt :file :translation-key))
            task-util/print-table))))
 
-(defn invalid-dicts
-  "Lists translation keys that don't exist in English"
+(defn invalid-translations
+  "Lists translation that don't exist in English"
   []
-  (let [dicts (get-dicts)
+  (let [dicts (merge-with merge (get-dicts) (get-shortcuts))
         ;; For now defined as :en but clj-kondo analysis could be more thorough
         valid-keys (set (keys (dicts :en)))
         invalid-dicts
@@ -70,16 +112,16 @@
                         (set/difference (set (keys get-dicts))
                                         valid-keys)))))]
     (if (empty? invalid-dicts)
-      (println "All dicts have valid keys!")
+      (println "All translations have valid keys!")
       (do
-        (println "Invalid dict keys found:")
+        (println "Invalid translation keys found:")
         (task-util/print-table invalid-dicts)
         (System/exit 1)))))
 
 (defn list-duplicates
   "Lists translations that are the same as the one in English"
   [& args]
-  (let [dicts (get-dicts)
+  (let [dicts (merge-with merge (get-dicts) (get-shortcuts))
         en-dicts (dicts :en)
         lang (or (keyword (first args))
                  (task-util/print-usage "LOCALE"))

+ 2 - 2
scripts/src/logseq/rewrite_clj.clj → scripts/src/logseq/tasks/rewrite_clj.clj

@@ -1,4 +1,4 @@
-(ns logseq.rewrite-clj
+(ns logseq.tasks.rewrite-clj
   "Rewrite-clj fns"
   (:require [rewrite-clj.zip :as z]))
 
@@ -10,6 +10,6 @@
       z/sexpr))
 
 (defn var-sexp
-  [[string-var file]]
+  [file string-var]
   (let [zloc (z/of-string (slurp file))]
     (find-symbol-first-right-sexpr zloc (symbol string-var))))

+ 0 - 2
src/main/frontend/components/block.cljs

@@ -62,8 +62,6 @@
             [frontend.components.query-table :as query-table]
             [frontend.mobile.util :as mobile-util]))
 
-;; TODO: remove rum/with-context because it'll make reactive queries not working
-
 (defn safe-read-string
   ([s]
    (safe-read-string s true))

+ 26 - 7
src/main/frontend/components/select.cljs

@@ -2,7 +2,7 @@
   "Generic component for fuzzy searching items to select an item. See
   select-config to add a new use or select-type for this component. To use the
   new select-type, set :ui/open-select to the select-type. See
-  :select-graph/open command for an example."
+  :graph/open command for an example."
   (:require [frontend.modules.shortcut.core :as shortcut]
             [frontend.context.i18n :refer [t]]
             [frontend.search :as search]
@@ -13,6 +13,7 @@
             [frontend.text :as text]
             [rum.core :as rum]
             [frontend.config :as config]
+            [frontend.handler.repo :as repo-handler]
             [reitit.frontend.easy :as rfe]))
 
 (rum/defc render-item
@@ -32,7 +33,8 @@
                    state)}
   [state {:keys [items limit on-chosen empty-placeholder prompt-key]
           :or {limit 100
-               prompt-key :select/default-prompt}}]
+               prompt-key :select/default-prompt
+               empty-placeholder (fn [_t] [:div])}}]
   (let [input (::input state)]
     [:div.cp__select.cp__select-main
      [:div.input-wrap
@@ -61,11 +63,12 @@
     fuzzy search and selection. Items can have an optional :id and are displayed
     lightly for a given item.
   * :on-chosen - fn that is given item when it is chosen.
-  * :empty-placeholder - fn that returns hiccup html to render if no matched graphs found.
-  * :prompt-key - dictionary keyword that prompts when components is first open.
-    Defaults to :select/default-prompt."
+  * :empty-placeholder (optional) - fn that returns hiccup html to render if no
+    matched graphs found.
+  * :prompt-key (optional) - dictionary keyword that prompts when components is
+    first open. Defaults to :select/default-prompt."
   []
-  {:select-graph
+  {:graph-open
    {:items-fn (fn []
                 (->>
                  (state/get-repos)
@@ -89,7 +92,23 @@
                           (ui/button
                            (t :select.graph/add-graph)
                            :href (rfe/href :repo-add)
-                           :on-click state/close-modal!)])}})
+                           :on-click state/close-modal!)])}
+   :graph-remove
+   {:items-fn (fn []
+                (->> (state/get-repos)
+                     (remove (fn [{:keys [url]}]
+                               (config/demo-graph? url)))
+                     (map (fn [{:keys [url] :as original-graph}]
+                            {:value (text/get-graph-name-from-path
+                                     ;; TODO: Use helper when a common one is refactored
+                                     ;; from components.repo
+                                     (if (config/local-db? url)
+                                       (config/get-local-dir url)
+                                       (db/get-repo-path url)))
+                             :id (config/get-repo-dir url)
+                             :graph url
+                             :original-graph original-graph}))))
+    :on-chosen #(repo-handler/remove-repo! (:original-graph %))}})
 
 (rum/defc select-modal < rum/reactive
   []

+ 0 - 1
src/main/frontend/components/sidebar.cljs

@@ -424,7 +424,6 @@
 (rum/defc help-button < rum/reactive
   []
   (when-not (state/sub :ui/sidebar-open?)
-    ;; TODO: remove with-context usage
     [:div.cp__sidebar-help-btn
      {:title (t :help-shortcut-title)
       :on-click (fn []

+ 16 - 4
src/main/frontend/modules/shortcut/config.cljs

@@ -314,10 +314,18 @@
                                     :binding "mod+shift+p"
                                     :fn      (fn [] (state/toggle! :ui/command-palette-open?))}
 
-   :select-graph/open              {:desc    "Open select graph component"
-                                    :fn      (fn [] (state/set-state! :ui/open-select :select-graph))
+   :graph/open              {:desc    "Select graph to open"
+                                    :fn      (fn [] (state/set-state! :ui/open-select :graph-open))
                                     :binding "mod+shift+g"}
 
+   :graph/remove            {:desc    "Remove a graph"
+                                    :fn      (fn [] (state/set-state! :ui/open-select :graph-remove))
+                                    :binding false}
+
+   :graph/add                      {:desc "Add a graph"
+                                    :fn (fn [] (route-handler/redirect! {:to :repo-add}))
+                                    :binding false}
+
    :command/run                    (when (util/electron?)
                                      {:desc    "Run git command"
                                       :binding "mod+shift+1"
@@ -498,7 +506,9 @@
     :shortcut.handler/editor-global
     (->
      (build-category-map [:command-palette/toggle
-                          :select-graph/open
+                          :graph/open
+                          :graph/remove
+                          :graph/add
                           :editor/cycle-todo
                           :editor/up
                           :editor/down
@@ -680,7 +690,9 @@
     :pdf/next-page
     :command/run
     :command-palette/toggle
-    :select-graph/open
+    :graph/open
+    :graph/remove
+    :graph/add
     :sidebar/clear
     :sidebar/open-today-page
     :search/re-index

+ 1 - 17
src/main/frontend/modules/shortcut/dict.cljs

@@ -40,12 +40,10 @@
                :command.ui/toggle-theme                 "在暗色/亮色主题之间切换"
                :command.ui/toggle-right-sidebar         "启用/关闭右侧栏"
                :command.ui/toggle-settings              "显示/关闭设置"
-               :command.ui/toggle-new-block             "切换 Enter/Shift+Enter 以插入新块"
                :command.go/journals                     "跳转到日记"
                :command.ui/toggle-wide-mode             "切换宽屏模式"
                :command.ui/toggle-brackets              "切换是否显示括号"
                :command.search/re-index                 "重新建立搜索索引"
-               :command.graph/re-index                  "重新建立图库索引"
                :command.editor/bold                     "粗体"
                :command.editor/italics                  "斜体"
                :command.editor/insert-link              "Html 链接"
@@ -95,7 +93,6 @@
                :command.ui/toggle-document-mode        "切換文檔模式"
                :command.ui/toggle-theme                "“在暗色/亮色主題之間切換”"
                :command.ui/toggle-right-sidebar        "啟用/關閉右側欄"
-               :command.ui/toggle-new-block            "切換 Enter/Shift+Enter 以插入新塊"
                :command.go/journals                    "跳轉到日記"}
 
      :de      {:shortcut.category/formatting           "Formatierung"
@@ -117,7 +114,6 @@
                :command.ui/toggle-document-mode        "Dokumentenmodus umschalten"
                :command.ui/toggle-theme                "Umschalten zwischen dunklem/hellem Thema"
                :command.ui/toggle-right-sidebar        "Rechte Seitenleiste umschalten"
-               :command.ui/toggle-new-block            "Umschalten von Enter/Shift+Enter zum Einfügen eines neuen Blocks"
                :command.go/journals                    "Zu Journalen springen"
                :command.git/commit                     "Git Commit-Nachricht"
                :command.editor/select-block-down       "Block unterhalb auswählen"
@@ -145,7 +141,6 @@
                :command.ui/toggle-document-mode        "Intervertir le mode document"
                :command.ui/toggle-theme                "Intervertir le thème foncé/clair"
                :command.ui/toggle-right-sidebar        "Afficher/cacher la barre latérale"
-               :command.ui/toggle-new-block            "Activer Entreée ou Shift+Enter pour insérer un bloc"
                :command.go/journals                    "Aller au Journal"}
 
      :af      {:shortcut.category/formatting           "Formatering"
@@ -170,8 +165,7 @@
                :command.ui/toggle-document-mode        "Wissel dokument modus"
                :command.go/journals                    "Spring na joernale"
                :command.ui/toggle-theme                "Wissel tussen donker/lig temas"
-               :command.ui/toggle-right-sidebar        "Wissel regter sybalk"
-               :command.ui/toggle-new-block            "Wissel Enter/Shift+enter vir die byvoeging van nuwe blokke"}
+               :command.ui/toggle-right-sidebar        "Wissel regter sybalk"}
 
      :es      {:shortcut.category/formatting            "Formato"
                :shortcut.category/basics                "Básico"
@@ -205,12 +199,10 @@
                :command.ui/toggle-theme                 "Alternar entre tema claro/oscuro"
                :command.ui/toggle-right-sidebar         "Alternar barra lateral"
                :command.ui/toggle-settings              "Alternar Opciones"
-               :command.ui/toggle-new-block             "Alternar Enter/Shift+Enter para crear nuevas lineas"
                :command.go/journals                     "Ir a los diarios"
                :command.ui/toggle-wide-mode             "Alternar modo ancho"
                :command.ui/toggle-brackets              "Alternar corchetes"
                :command.search/re-index                 "Reconstruir índice de búsqueda"
-               :command.graph/re-index                  "Reindexar el grafo completo"
                :command.editor/bold                     "Negrita"
                :command.editor/italics                  "Cursiva"
                :command.editor/insert-link              "Enlace html"
@@ -271,12 +263,10 @@
                :command.ui/toggle-theme                 "Переключение между светлой / темной темой"
                :command.ui/toggle-right-sidebar         "Переключить боковую панель"
                :command.ui/toggle-settings              "Переключить параметры"
-               :command.ui/toggle-new-block             "Переключение Enter/Shift+Enter для перехода на новую строку"
                :command.go/journals                     "Перейти в Дневники"
                :command.ui/toggle-wide-mode             "Переключить широкоформатный режим"
                :command.ui/toggle-brackets              "Переключить скобки"
                :command.search/re-index                 "Восстановить индекс поиска"
-               :command.graph/re-index                  "Переиндексировать весь граф"
                :command.editor/bold                     "Жирный"
                :command.editor/italics                  "Курсив"
                :command.editor/insert-link              "HTML ссылка"
@@ -338,12 +328,10 @@
                :command.ui/toggle-left-sidebar          "Aktiver venstre sidestolpe"
                :command.ui/toggle-right-sidebar         "Aktiver høyre sidestolpe"
                :command.ui/toggle-settings              "Åpne innstillinger"
-               :command.ui/toggle-new-block             "Veksle mellom Enter og Shift+Enter for ny linje"
                :command.go/journals                     "Gå til dagbok"
                :command.ui/toggle-wide-mode             "Aktiver vid-modus"
                :command.ui/toggle-brackets              "Aktiver vising av klammer"
                :command.search/re-index                 "Gjenoppbygg søkeindeks"
-               :command.graph/re-index                  "Reindekser hele diagrammet"
                :command.editor/bold                     "Fet"
                :command.editor/italics                  "Kursiv"
                :command.editor/insert-link              "HTML lenke"
@@ -404,12 +392,10 @@
                :command.ui/toggle-theme                 "Alternar entre tema claro/escuro"
                :command.ui/toggle-right-sidebar         "Alternar barra lateral"
                :command.ui/toggle-settings              "Alternar Opções"
-               :command.ui/toggle-new-block             "Alternar Enter/Shift+Enter para criar novas linhas"
                :command.go/journals                     "Ir para diários"
                :command.ui/toggle-wide-mode             "Alternar modo de ecrã amplo"
                :command.ui/toggle-brackets              "Alternar parênteses rectos"
                :command.search/re-index                 "Reconstruir índice de pesquisa"
-               :command.graph/re-index                  "Reindexar o grafo completo"
                :command.editor/bold                     "Negrito"
                :command.editor/italics                  "Itálico"
                :command.editor/insert-link              "Inserir ligação html"
@@ -470,12 +456,10 @@
                :command.ui/toggle-theme                 "Alternar entre tema claro/escuro"
                :command.ui/toggle-right-sidebar         "Alternar barra lateral"
                :command.ui/toggle-settings              "Alternar Opções"
-               :command.ui/toggle-new-block             "Alternar Enter/Shift+Enter para criar novas linhas"
                :command.go/journals                     "Ir para diários"
                :command.ui/toggle-wide-mode             "Alternar largura extendida"
                :command.ui/toggle-brackets              "Alternar colchetes"
                :command.search/re-index                 "Reconstruir índice de pesquisa"
-               :command.graph/re-index                  "Reindexar o grafo completo"
                :command.editor/bold                     "Negrito"
                :command.editor/italics                  "Itálico"
                :command.editor/insert-link              "Inserir vínculo"