Browse Source

feat: support remove options when export

- remove [[]]
- remove emphasis
rcmerci 4 years ago
parent
commit
6a95533233

+ 48 - 17
src/main/frontend/components/export.cljs

@@ -71,6 +71,7 @@
                                  :selected false}])
 
 (def *export-block-text-indent-style (atom "dashes"))
+(def *export-block-text-remove-options (atom #{}))
 
 (rum/defcs export-blocks
   < rum/reactive
@@ -79,13 +80,14 @@
   (let [current-repo (state/get-current-repo)
         type (rum/react *export-block-type)
         text-indent-style (rum/react *export-block-text-indent-style)
+        text-remove-options (rum/react *export-block-text-remove-options)
         copied? (::copied? state)
         content
         (case type
-          :text (export/export-blocks-as-markdown current-repo root-block-id text-indent-style)
+          :text (export/export-blocks-as-markdown current-repo root-block-id text-indent-style (into [] text-remove-options))
           :opml (export/export-blocks-as-opml current-repo root-block-id)
           :html (export/export-blocks-as-html current-repo root-block-id)
-          (export/export-blocks-as-markdown current-repo root-block-id text-indent-style))]
+          (export/export-blocks-as-markdown current-repo root-block-id text-indent-style (into [] text-remove-options)))]
     [:div.export.w-96.resize
      [:div
       {:class "mb-2"}
@@ -104,21 +106,50 @@
                                 (if (= text-indent-style (:label opt))
                                   (assoc opt :selected true)
                                   opt))))]
-       [:div.flex.items-center
-        [:label.mr-8 "Indentation style:"]
-        [:select.block.my-2.text-lg.rounded.border
-         {:style     {:padding "0 0 0 12px"
-                      :visibility (if (= :text type) "visible" "hidden")}
-          :on-change (fn [e]
-                       (let [value (util/evalue e)]
-                         (#(reset! *export-block-text-indent-style %) value)))}
-         (for [{:keys [label value selected]} options]
-           [:option (cond->
-                     {:key   label
-                      :value (or value label)}
-                      selected
-                      (assoc :selected selected))
-            label])]])
+       [:div [:div.flex.items-center
+              [:label.mr-8
+               {:style {:visibility (if (= :text type) "visible" "hidden")}}
+               "Indentation style:"]
+              [:select.block.my-2.text-lg.rounded.border
+               {:style     {:padding "0 0 0 12px"
+                            :visibility (if (= :text type) "visible" "hidden")}
+                :on-change (fn [e]
+                             (let [value (util/evalue e)]
+                               (reset! *export-block-text-indent-style value)))}
+               (for [{:keys [label value selected]} options]
+                 [:option (cond->
+                           {:key   label
+                            :value (or value label)}
+                            selected
+                            (assoc :selected selected))
+                  label])]]
+        [:div.flex.items-center
+         (ui/checkbox {:style {:margin-right 6
+                               :visibility (if (= :text type) "visible" "hidden")}
+                       :checked (contains? text-remove-options :page-ref)
+                       :on-change (fn [e] (if (util/echecked? e)
+                                            (swap! *export-block-text-remove-options
+                                                   #(conj % :page-ref))
+                                            (swap! *export-block-text-remove-options
+                                                   #(disj % :page-ref))))})
+
+         [:div
+          {:style {:visibility (if (= :text type) "visible" "hidden")}}
+          "[[text]] -> text"]
+         (ui/checkbox {:style {:margin-right 6
+                               :margin-left 10
+                               :visibility (if (= :text type) "visible" "hidden")}
+                       :checked (contains? text-remove-options :emphasis)
+                       :on-change (fn [e] (if (util/echecked? e)
+                                            (swap! *export-block-text-remove-options
+                                                   #(conj % :emphasis))
+                                            (swap! *export-block-text-remove-options
+                                                   #(disj % :emphasis))))})
+
+         [:div
+          {:style {:visibility (if (= :text type) "visible" "hidden")}}
+          "remove emphasis"]]])
+
      (ui/button (if @copied? "Copied to clipboard!" "Copy to clipboard")
                 :on-click (fn []
                             (util/copy-to-clipboard! content)

+ 15 - 2
src/main/frontend/format/mldoc.cljs

@@ -21,10 +21,21 @@
 (defonce parseAndExportOPML (gobj/get Mldoc "parseAndExportOPML"))
 (defonce astExportMarkdown (gobj/get Mldoc "astExportMarkdown"))
 
+(defn convert-export-md-remove-options [opts]
+  (->>
+   (mapv (fn [opt]
+             (case opt
+               :page-ref ["Page_ref"]
+               :emphasis ["Emphasis"]
+               []))
+         opts)
+   (remove empty?)))
+
+
 (defn default-config
   ([format]
    (default-config format {:export-heading-to-list? false}))
-  ([format {:keys [export-heading-to-list? export-keep-properties? export-md-indent-style]}]
+  ([format {:keys [export-heading-to-list? export-keep-properties? export-md-indent-style export-md-remove-options]}]
    (let [format (string/capitalize (name (or format :markdown)))]
      (->> {:toc false
            :heading_number false
@@ -32,7 +43,9 @@
            :format format
            :heading_to_list (or export-heading-to-list? false)
            :exporting_keep_properties export-keep-properties?
-           :export_md_indent_style export-md-indent-style}
+           :export_md_indent_style export-md-indent-style
+           :export_md_remove_options
+           (convert-export-md-remove-options export-md-remove-options)}
           (filter #(not(nil? (second %))))
           (into {})
           (bean/->js)

+ 1 - 1
src/main/frontend/handler/editor.cljs

@@ -1074,7 +1074,7 @@
         level-blocks (mapv (fn [uuid] (get level-blocks-uuid-map uuid)) block-ids*)
         tree (blocks-vec->tree level-blocks)
         top-level-block-uuids (mapv :block/uuid (filterv #(not (vector? %)) tree))
-        exported-md-contents (mapv #(export/export-blocks-as-markdown repo % "spaces")
+        exported-md-contents (mapv #(export/export-blocks-as-markdown repo % "spaces" [])
                                    top-level-block-uuids)]
     [(string/join "\n" (mapv string/trim-newline exported-md-contents)) tree]))
 

+ 2 - 2
src/main/frontend/handler/export.cljs

@@ -448,7 +448,7 @@
                    (js/JSON.stringify (clj->js refs)))))
 
 (defn export-blocks-as-markdown
-  [repo root-block-uuid indent-style]
+  [repo root-block-uuid indent-style remove-options]
   (let [get-page&block-refs-by-query-aux (get-embed-and-refs-blocks-pages-aux)
         f #(get-page&block-refs-by-query repo % get-page&block-refs-by-query-aux {:is-block? true})
         root-block (db/entity [:block/uuid root-block-uuid])
@@ -457,7 +457,7 @@
         content (get-blocks-contents repo root-block-uuid)
         format (or (:block/format root-block) (state/get-preferred-format))]
     (fp/exportMarkdown f/mldoc-record content
-                       (f/get-default-config format {:export-md-indent-style indent-style})
+                       (f/get-default-config format {:export-md-indent-style indent-style :export-md-remove-options remove-options})
                        (js/JSON.stringify (clj->js refs)))))
 
 (defn export-blocks-as-html

+ 4 - 0
src/main/frontend/util.cljc

@@ -90,6 +90,10 @@
    (defn ekey [event]
      (gobj/getValueByKeys event "key")))
 
+#?(:cljs
+   (defn echecked? [event]
+     (gobj/getValueByKeys event "target" "checked")))
+
 #?(:cljs
    (defn set-change-value
      "compatible change event for React"