| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- (ns frontend.tools.html-export
- (:require-macros [hiccups.core :as hiccups :refer [html]])
- (:require [frontend.db :as db]
- [frontend.components.block :as block]
- [frontend.extensions.slide :as slide]
- [hiccups.runtime :as hiccupsrt]
- [clojure.walk :as walk]
- [clojure.set :as set]
- [medley.core :as medley]))
- ;; Consider generate a db index so that search can still works
- ;; Or maybe TiddlyWiki
- ;; It could be better that we can reuse some parts of this module in a nodejs tool,
- ;; so users don't have to use the web for exporting to htmls or publishing.
- (defn- build-block
- [config block]
- (let [body (:block/body block)
- block (block/build-block-part config block)]
- [:div.block
- block
- (when (seq body)
- (for [child body]
- (do
- (block/markup-element-cp config child))))]))
- (defn export-page
- [page-name blocks show-notification!]
- (let [{:keys [slide] :as properties} (db/get-page-properties page-name)
- slide? slide
- blocks (if (:block/pre-block? (first blocks))
- (rest blocks)
- blocks)]
- (if (seq blocks)
- (let [config {:html-export? true :slide? slide?}
- hiccup (if slide?
- (let [sections (block/build-slide-sections blocks
- (merge
- config
- {:id "slide"
- :start-level 2
- :page-name page-name})
- build-block)]
- (slide/slide-content false "" sections))
- [:div.page
- (for [block blocks]
- (build-block config block))])
- remove-attrs #{:on-click :on-change}
- hiccup (walk/postwalk (fn [f]
- (if (and (map? f)
- (seq (set/intersection remove-attrs (set (keys f)))))
- (medley/remove-keys remove-attrs f)
- f))
- hiccup)]
- (html hiccup))
- (show-notification! "The published content can't be empty." :error))))
|