mirror of
https://github.com/penpot/penpot.git
synced 2025-06-06 21:31:37 +02:00
Add basic impl for current page svg download.
This commit is contained in:
parent
78f010b47e
commit
fec40eae54
2 changed files with 79 additions and 46 deletions
|
@ -3,6 +3,7 @@
|
||||||
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
;;
|
;;
|
||||||
;; Copyright (c) 2016 Andrey Antukh <niwi@niwi.nz>
|
;; Copyright (c) 2016 Andrey Antukh <niwi@niwi.nz>
|
||||||
|
|
||||||
(ns uxbox.main.exports
|
(ns uxbox.main.exports
|
||||||
"The main logic for SVG export functionality."
|
"The main logic for SVG export functionality."
|
||||||
(:require [uxbox.main.state :as st]
|
(:require [uxbox.main.state :as st]
|
||||||
|
|
|
@ -6,61 +6,93 @@
|
||||||
;; Copyright (c) 2016 Juan de la Cruz <delacruzgarciajuan@gmail.com>
|
;; Copyright (c) 2016 Juan de la Cruz <delacruzgarciajuan@gmail.com>
|
||||||
|
|
||||||
(ns uxbox.main.ui.workspace.download
|
(ns uxbox.main.ui.workspace.download
|
||||||
(:require [sablono.core :as html :refer-macros [html]]
|
(:require [lentes.core :as l]
|
||||||
[lentes.core :as l]
|
|
||||||
[rum.core :as rum]
|
|
||||||
[uxbox.main.constants :as c]
|
|
||||||
[uxbox.main.state :as st]
|
[uxbox.main.state :as st]
|
||||||
[uxbox.util.rstore :as rs]
|
[uxbox.util.rstore :as rs]
|
||||||
[uxbox.main.data.pages :as udp]
|
|
||||||
[uxbox.main.data.forms :as udf]
|
|
||||||
[uxbox.main.data.workspace :as udw]
|
|
||||||
[uxbox.main.data.lightbox :as udl]
|
[uxbox.main.data.lightbox :as udl]
|
||||||
[uxbox.main.ui.icons :as i]
|
[uxbox.main.ui.icons :as i]
|
||||||
[uxbox.util.mixins :as mx]
|
|
||||||
[uxbox.main.ui.forms :as forms]
|
|
||||||
[uxbox.main.ui.lightbox :as lbx]
|
[uxbox.main.ui.lightbox :as lbx]
|
||||||
[uxbox.main.ui.colorpicker :as uucp]
|
[uxbox.main.exports :as exports]
|
||||||
[uxbox.main.ui.workspace.base :as wb]
|
[uxbox.util.blob :as blob]
|
||||||
|
[uxbox.util.mixins :as mx]
|
||||||
[uxbox.util.dom :as dom]
|
[uxbox.util.dom :as dom]
|
||||||
[uxbox.util.data :refer (parse-int)]))
|
[uxbox.util.data :refer (read-string)]))
|
||||||
|
|
||||||
|
;; --- Refs
|
||||||
|
|
||||||
(defn- download-dialog-render
|
(defn- resolve-pages
|
||||||
|
[state]
|
||||||
|
(let [project (get-in state [:workspace :project])]
|
||||||
|
(->> (vals (:pages-by-id state))
|
||||||
|
(filter #(= project (:project %)))
|
||||||
|
(sort-by :created-at))))
|
||||||
|
|
||||||
|
(def pages-ref
|
||||||
|
(-> (l/lens resolve-pages)
|
||||||
|
(l/derive st/state)))
|
||||||
|
|
||||||
|
(def current-page-ref
|
||||||
|
(-> (l/in [:workspace :page])
|
||||||
|
(l/derive st/state)))
|
||||||
|
|
||||||
|
;; --- Download Lightbox (Component)
|
||||||
|
|
||||||
|
(defn- download-page-svg
|
||||||
|
[page]
|
||||||
|
(let [content (exports/render-page page)
|
||||||
|
blob (blob/create content "image/svg+xml")
|
||||||
|
uri (blob/create-uri blob)
|
||||||
|
link (.createElement js/document "a")
|
||||||
|
event (js/MouseEvent. "click")]
|
||||||
|
(.setAttribute link "href" uri)
|
||||||
|
(.setAttribute link "download" "page.svg")
|
||||||
|
|
||||||
|
(.appendChild (.-body js/document) link)
|
||||||
|
(.dispatchEvent link event)
|
||||||
|
(blob/revoke-uri uri)
|
||||||
|
(.removeChild (.-body js/document) link)))
|
||||||
|
|
||||||
|
(mx/defcs download-dialog
|
||||||
|
{:mixins [mx/static mx/reactive]}
|
||||||
[own]
|
[own]
|
||||||
(html
|
(letfn [(on-close [event]
|
||||||
[:div.lightbox-body.export-dialog
|
(dom/prevent-default event)
|
||||||
[:h3 "Export options"]
|
(udl/close!))
|
||||||
[:div.row-flex
|
(download-page [event]
|
||||||
[:div.content-col
|
(dom/prevent-default event)
|
||||||
[:span.icon i/file-svg]
|
(let [page (-> (mx/ref-node own "page")
|
||||||
[:span.title "Export page"]
|
(dom/get-value)
|
||||||
[:p.info "Download a single page of your project in SVG."]
|
(read-string))]
|
||||||
[:select.input-select
|
(download-page-svg page)
|
||||||
[:option "Choose a page"]
|
(udl/close!)))
|
||||||
[:option "Page 001"]
|
(download-zip [event]
|
||||||
[:option "Page 002"]
|
(dom/prevent-default event))
|
||||||
[:option "Page 003"]]
|
(download-html [event]
|
||||||
[:a.btn-primary {:href "#"} "Export page"]]
|
(dom/prevent-default event))]
|
||||||
[:div.content-col
|
(let [pages (mx/react pages-ref)
|
||||||
[:span.icon i/folder-zip]
|
current (mx/react current-page-ref)]
|
||||||
[:span.title "Export project"]
|
[:div.lightbox-body.export-dialog
|
||||||
[:p.info "Download the whole project as a ZIP file."]
|
[:h3 "Export options"]
|
||||||
[:a.btn-primary {:href "#"} "Expor project"]]
|
[:div.row-flex
|
||||||
[:div.content-col
|
[:div.content-col
|
||||||
[:span.icon i/file-html]
|
[:span.icon i/file-svg]
|
||||||
[:span.title "Export as HTML"]
|
[:span.title "Export page"]
|
||||||
[:p.info "Download your project as HTML files."]
|
[:p.info "Download a single page of your project in SVG."]
|
||||||
[:a.btn-primary {:href "#"} "Export HTML"]]]
|
[:select.input-select {:ref "page" :default-value (pr-str current)}
|
||||||
[:a.close {:href "#"
|
(for [{:keys [id name]} pages]
|
||||||
:on-click #(do (dom/prevent-default %)
|
[:option {:value (pr-str id)} name])]
|
||||||
(udl/close!))} i/close]]))
|
[:a.btn-primary {:href "#" :on-click download-page} "Export page"]]
|
||||||
|
[:div.content-col
|
||||||
(def download-dialog
|
[:span.icon i/folder-zip]
|
||||||
(mx/component
|
[:span.title "Export project"]
|
||||||
{:render download-dialog-render
|
[:p.info "Download the whole project as a ZIP file."]
|
||||||
:name "download-dialog"
|
[:a.btn-primary {:href "#" :on-click download-zip} "Expor project"]]
|
||||||
:mixins []}))
|
[:div.content-col
|
||||||
|
[:span.icon i/file-html]
|
||||||
|
[:span.title "Export as HTML"]
|
||||||
|
[:p.info "Download your project as HTML files."]
|
||||||
|
[:a.btn-primary {:href "#" :on-click download-html} "Export HTML"]]]
|
||||||
|
[:a.close {:href "#" :on-click on-close} i/close]])))
|
||||||
|
|
||||||
(defmethod lbx/render-lightbox :download
|
(defmethod lbx/render-lightbox :download
|
||||||
[_]
|
[_]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue