|
|
@@ -7,15 +7,28 @@
|
|
|
[frontend.db.utils :as db-utils]
|
|
|
[frontend.state :as state]
|
|
|
[frontend.util :as util]
|
|
|
- [frontend.debug :as debug]))
|
|
|
+ [frontend.debug :as debug]
|
|
|
+ [frontend.util.property :as property]))
|
|
|
|
|
|
(defn- indented-block-content
|
|
|
[content spaces-tabs]
|
|
|
(let [lines (string/split-lines content)]
|
|
|
(string/join (str "\n" spaces-tabs) lines)))
|
|
|
|
|
|
+(defn- content-with-collapsed-state
|
|
|
+ [format content collapsed? properties]
|
|
|
+ (cond
|
|
|
+ collapsed?
|
|
|
+ (property/insert-property format content :collapsed true)
|
|
|
+
|
|
|
+ (and (:collapsed properties) (false? collapsed?))
|
|
|
+ (property/remove-property format :collapsed content)
|
|
|
+
|
|
|
+ :else
|
|
|
+ content))
|
|
|
+
|
|
|
(defn transform-content
|
|
|
- [{:block/keys [format pre-block? unordered content heading-level left page parent]} level {:keys [heading-to-list?]}]
|
|
|
+ [{:block/keys [collapsed? format pre-block? unordered content heading-level left page parent properties]} level {:keys [heading-to-list?]}]
|
|
|
(let [content (or content "")
|
|
|
first-block? (= left page)
|
|
|
pre-block? (and first-block? pre-block?)
|
|
|
@@ -60,7 +73,7 @@
|
|
|
""
|
|
|
" ")]
|
|
|
(str prefix sep new-content)))]
|
|
|
- content))
|
|
|
+ (content-with-collapsed-state format content collapsed? properties)))
|
|
|
|
|
|
(defn tree->file-content
|
|
|
[tree {:keys [init-level]
|
|
|
@@ -68,19 +81,16 @@
|
|
|
(loop [block-contents []
|
|
|
[f & r] tree
|
|
|
level init-level]
|
|
|
- (let [f (if (:block/collapsed? f)
|
|
|
- (assoc-in f [:block/properties :collapsed] true)
|
|
|
- f)]
|
|
|
- (if (nil? f)
|
|
|
- (string/join "\n" block-contents)
|
|
|
- (let [page? (nil? (:block/page f))
|
|
|
- content (if page? nil (transform-content f level opts))
|
|
|
- new-content
|
|
|
- (->> (if-let [children (seq (:block/children f))]
|
|
|
- [content (tree->file-content children {:init-level (inc level)})]
|
|
|
- [content])
|
|
|
- (remove nil?))]
|
|
|
- (recur (into block-contents new-content) r level))))))
|
|
|
+ (if (nil? f)
|
|
|
+ (string/join "\n" block-contents)
|
|
|
+ (let [page? (nil? (:block/page f))
|
|
|
+ content (if page? nil (transform-content f level opts))
|
|
|
+ new-content
|
|
|
+ (->> (if-let [children (seq (:block/children f))]
|
|
|
+ [content (tree->file-content children {:init-level (inc level)})]
|
|
|
+ [content])
|
|
|
+ (remove nil?))]
|
|
|
+ (recur (into block-contents new-content) r level)))))
|
|
|
|
|
|
(def init-level 1)
|
|
|
|