Browse Source

fix: template properties

Tienson Qin 4 years ago
parent
commit
443812b942

+ 2 - 1
src/main/frontend/format/block.cljs

@@ -516,7 +516,8 @@
                                              (utf8/length encoded-content))}
                          :body @pre-block-body
                          :properties @pre-block-properties
-                         :pre-block? true}
+                         :pre-block? true
+                         :unordered true}
                         (block-keywordize)))
                      (select-keys first-block [:block/file :block/format :block/page]))
                     blocks)

+ 10 - 3
src/main/frontend/handler/editor.cljs

@@ -277,8 +277,9 @@
     block))
 
 (defn- wrap-parse-block
-  [{:block/keys [content format parent page uuid] :as block}]
-  (let [ast (mldoc/->edn (string/trim content) (mldoc/default-config format))
+  [{:block/keys [content format parent left page uuid pre-block?] :as block}]
+  (let [first-block? (= left page)
+        ast (mldoc/->edn (string/trim content) (mldoc/default-config format))
         first-elem-type (first (ffirst ast))
         properties? (contains? #{"Property_Drawer" "Properties"} first-elem-type)
         top-level? (= parent page)
@@ -299,6 +300,9 @@
                              (let [content' (str (config/get-block-pattern format) (if heading? " " "\n") content)]
                                [content content']))
         block (block/parse-block (assoc block :block/content content'))
+        block (if (and first-block? (:block/pre-block? block))
+                block
+                (dissoc block :block/pre-block?))
         block (attach-page-properties-if-exists! block)]
     (-> block
        (dissoc :block/top?
@@ -1820,7 +1824,9 @@
                                                         new-title (or (:title (second (ffirst
                                                                                        (mldoc/->edn (str (case format
                                                                                                            :markdown "- "
-                                                                                                           :org "* ") new-content)
+                                                                                                           :org "* ")
+                                                                                                         (if (:block/title %) "" "\n")
+                                                                                                         new-content)
                                                                                                     (mldoc/default-config format)))))
                                                                       (:block/title %))]
                                                     [new-content new-title])
@@ -1840,6 +1846,7 @@
                                                    :block/content new-content
                                                    :block/title new-title}
                                                   (dissoc %
+                                                          :block/pre-block?
                                                           :block/uuid
                                                           :block/page
                                                           :block/file

+ 5 - 3
src/main/frontend/modules/file/core.cljs

@@ -21,11 +21,13 @@
     (string/join (str "\n" spaces-tabs) lines)))
 
 (defn transform-content
-  [{:block/keys [format pre-block? title content unordered body heading-level]} level heading-to-list?]
+  [{:block/keys [format pre-block? title content unordered body heading-level left page]} level heading-to-list?]
   (let [content (or content "")
-        heading-with-title? (seq title)]
+        heading-with-title? (seq title)
+        first-block? (= left page)
+        pre-block? (and first-block? pre-block?)]
     (cond
-      pre-block?
+      (and first-block? pre-block?)
       (let [content (-> (string/trim content)
                         ;; FIXME: should only works with :filters
                         (string/replace "\"" "\\\""))]