Sfoglia il codice sorgente

fix(editor): hide page properties if there's only a title attribute

We need to design a better UX for both page and block's properties.
Tienson Qin 4 anni fa
parent
commit
82a2f049e1

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

@@ -1817,9 +1817,8 @@
                                :else
                                -10)}}
        (let [first-block (first blocks)
-             blocks (if (and (:id config)
-                             (not (:embed? config))
-                             (some? (date/valid-journal-title? (string/capitalize (:id config)))))
+             blocks (if (and (:block/pre-block? first-block)
+                             (block-handler/pre-block-with-only-title? (:block/repo first-block) (:block/uuid first-block)))
                       (rest blocks)
                       blocks)
              first-id (:block/uuid (first blocks))]

+ 35 - 22
src/main/frontend/handler/block.cljs

@@ -125,6 +125,19 @@
                       :block/collapsed? false})
                    block-ids))))
 
+(defn pre-block-with-only-title?
+  [repo block-id]
+  (when-let [block (db/entity repo [:block/uuid block-id])]
+    (let [properties (:page/properties (:block/page block))]
+      (and (:title properties)
+           (= 1 (count properties))
+           (let [ast (mldoc/->edn (:block/content block) (mldoc/default-config (:block/format block)))]
+             (or
+              (empty? (rest ast))
+              (every? (fn [[[typ break-lines]] _]
+                        (and (= typ "Paragraph")
+                             (every? #(= % ["Break_Line"]) break-lines))) (rest ast))))))))
+
 (defn with-dummy-block
   ([blocks format]
    (with-dummy-block blocks format {} {}))
@@ -132,37 +145,37 @@
                                   :or {journal? false}}]
    (let [format (or format (state/get-preferred-format) :markdown)
          blocks (if (and journal?
-                      (seq blocks)
-                      (when-let [title (second (first (:block/title (first blocks))))]
-                        (date/valid-journal-title? title)))
+                         (seq blocks)
+                         (when-let [title (second (first (:block/title (first blocks))))]
+                           (date/valid-journal-title? title)))
                   (rest blocks)
                   blocks)
          blocks (vec blocks)]
      (cond
        (and (seq blocks)
-         (or (and (> (count blocks) 1)
-               (:block/pre-block? (first blocks)))
-           (and (>= (count blocks) 1)
-             (not (:block/pre-block? (first blocks))))))
+            (or (and (> (count blocks) 1)
+                     (:block/pre-block? (first blocks)))
+                (and (>= (count blocks) 1)
+                     (not (:block/pre-block? (first blocks))))))
        blocks
 
        :else
        (let [last-block (last blocks)
              end-pos (get-in last-block [:block/meta :end-pos] 0)
              dummy (merge last-block
-                     (let [uuid (d/squuid)]
-                       {:block/uuid uuid
-                        :block/title ""
-                        :block/content (config/default-empty-block format)
-                        :block/format format
-                        :block/level 2
-                        :block/priority nil
-                        :block/anchor (str uuid)
-                        :block/meta {:start-pos end-pos
-                                     :end-pos end-pos}
-                        :block/body nil
-                        :block/dummy? true
-                        :block/marker nil
-                        :block/pre-block? false})
-                     default-option)]
+                          (let [uuid (d/squuid)]
+                            {:block/uuid uuid
+                             :block/title ""
+                             :block/content (config/default-empty-block format)
+                             :block/format format
+                             :block/level 2
+                             :block/priority nil
+                             :block/anchor (str uuid)
+                             :block/meta {:start-pos end-pos
+                                          :end-pos end-pos}
+                             :block/body nil
+                             :block/dummy? true
+                             :block/marker nil
+                             :block/pre-block? false})
+                          default-option)]
          (conj blocks dummy))))))