Browse Source

enhance: add an option to expand block references

Tienson Qin 4 years ago
parent
commit
0fdd1275d1

+ 3 - 1
src/main/frontend/components/block.cljs

@@ -1776,7 +1776,9 @@
            (let [[config block] (:rum/args state)
                  ref-collpased? (boolean
                                  (and (:ref? config)
-                                      (seq (:block/children block))))]
+                                      (seq (:block/children block))
+                                      (>= (:ref/level block)
+                                          (state/get-ref-open-blocks-level))))]
              (assoc state
                     ::control-show? (atom false)
                     ::ref-collapsed? (atom ref-collpased?))))

+ 20 - 1
src/main/frontend/components/reference.cljs

@@ -50,6 +50,24 @@
   (fn [close-fn]
     (filter-dialog-inner filters-atom close-fn references page-name)))
 
+(defn- block-with-ref-level
+  [block level]
+  (if (:block/children block)
+    (-> (update block :block/children
+             (fn [blocks]
+               (map (fn [block]
+                      (let [level (inc level)
+                            block (assoc block :ref/level level)]
+                        (block-with-ref-level block level))) blocks)))
+        (assoc :ref/level level))
+    (assoc block :ref/level level)))
+
+(defn- blocks-with-ref-level
+  [page-blocks]
+  (map (fn [[page blocks]]
+         [page (map #(block-with-ref-level % 1) blocks)])
+    page-blocks))
+
 (rum/defcs references < rum/reactive
   {:init (fn [state]
            (let [page-name (first (:rum/args state))
@@ -83,7 +101,8 @@
           filters (when (seq filter-state)
                     (->> (group-by second filter-state)
                          (medley/map-vals #(map first %))))
-          filtered-ref-blocks (block-handler/filter-blocks repo ref-blocks filters true)
+          filtered-ref-blocks (->> (block-handler/filter-blocks repo ref-blocks filters true)
+                                   blocks-with-ref-level)
           n-ref (apply +
                  (for [[_ rfs] filtered-ref-blocks]
                    (count rfs)))]

+ 8 - 0
src/main/frontend/state.cljs

@@ -1261,6 +1261,14 @@
    (get-in @state [:me :settings :start-of-week])
    6))
 
+(defn get-ref-open-blocks-level
+  []
+  (or
+   (when-let [value (:ref/default-open-blocks-level (get-config))]
+     (when (integer? value)
+       value))
+   2))
+
 (defn get-events-chan
   []
   (:system/events @state))

+ 12 - 1
templates/config.edn

@@ -150,4 +150,15 @@
  ;; Rose is red, violet's blue. Life's ordered: Org assists you.
  :macros {}
 
- :markdown/version 2}
+ :markdown/version 2
+
+ ;; The default level to be opened for the linked references.
+ ;; For example, if we have some example blocks like this:
+ ;; - a [[page]] (level 1)
+ ;;   - b        (level 2)
+ ;;     - c      (level 3)
+ ;;       - d    (level 4)
+ ;;
+ ;; With the default value of level 2, `b` will be collapsed.
+ ;; If we set the level's value to 3, `b` will be opened and `c` will be collapsed.
+ :ref/default-open-blocks-level 2}