mirror of
https://github.com/penpot/penpot.git
synced 2026-09-19 02:16:14 +00:00
Refactor lightbox impl approach (split business logic from UI).
This commit is contained in:
parent
aaecf3e174
commit
ba0627c3ad
46
src/uxbox/data/lightbox.cljs
Normal file
46
src/uxbox/data/lightbox.cljs
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
;; This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
;;
|
||||||
|
;; Copyright (c) 2016 Andrey Antukh <niwi@niwi.nz>
|
||||||
|
|
||||||
|
(ns uxbox.data.lightbox
|
||||||
|
(:require [promesa.core :as p]
|
||||||
|
[beicon.core :as rx]
|
||||||
|
[lentes.core :as l]
|
||||||
|
[uxbox.rstore :as rs]))
|
||||||
|
|
||||||
|
;; --- Show Lightbox
|
||||||
|
|
||||||
|
(defrecord ShowLightbox [name params]
|
||||||
|
rs/UpdateEvent
|
||||||
|
(-apply-update [_ state]
|
||||||
|
(let [data (merge {:name name} params)]
|
||||||
|
(assoc state :lightbox data))))
|
||||||
|
|
||||||
|
(defn show-lightbox
|
||||||
|
([name]
|
||||||
|
(ShowLightbox. name nil))
|
||||||
|
([name params]
|
||||||
|
(ShowLightbox. name params)))
|
||||||
|
|
||||||
|
;; --- Hide Lightbox
|
||||||
|
|
||||||
|
(defrecord HideLightbox []
|
||||||
|
rs/UpdateEvent
|
||||||
|
(-apply-update [_ state]
|
||||||
|
(dissoc state :lightbox)))
|
||||||
|
|
||||||
|
(defn hide-lightbox
|
||||||
|
[]
|
||||||
|
(HideLightbox.))
|
||||||
|
|
||||||
|
;; --- Direct Call Api
|
||||||
|
|
||||||
|
(defn open!
|
||||||
|
[& args]
|
||||||
|
(rs/emit! (apply show-lightbox args)))
|
||||||
|
|
||||||
|
(defn close!
|
||||||
|
[& args]
|
||||||
|
(rs/emit! (apply hide-lightbox args)))
|
||||||
@ -16,7 +16,7 @@
|
|||||||
[uxbox.data.pages :as udp]
|
[uxbox.data.pages :as udp]
|
||||||
[uxbox.data.shapes :as uds]
|
[uxbox.data.shapes :as uds]
|
||||||
[uxbox.data.forms :as udf]
|
[uxbox.data.forms :as udf]
|
||||||
[uxbox.ui.lightbox :as lightbox]
|
[uxbox.data.lightbox :as udl]
|
||||||
[uxbox.util.datetime :as dt]
|
[uxbox.util.datetime :as dt]
|
||||||
[uxbox.util.math :as mth]
|
[uxbox.util.math :as mth]
|
||||||
[uxbox.util.data :refer (index-of)]
|
[uxbox.util.data :refer (index-of)]
|
||||||
@ -209,7 +209,7 @@
|
|||||||
|
|
||||||
rs/EffectEvent
|
rs/EffectEvent
|
||||||
(-apply-effect [_ state]
|
(-apply-effect [_ state]
|
||||||
(lightbox/close!)))
|
(udl/close!)))
|
||||||
|
|
||||||
(def submit-workspace-settings-schema
|
(def submit-workspace-settings-schema
|
||||||
{:grid/y-axis [sc/required sc/integer [sc/in-range 2 100]]
|
{:grid/y-axis [sc/required sc/integer [sc/in-range 2 100]]
|
||||||
|
|||||||
@ -7,20 +7,21 @@
|
|||||||
|
|
||||||
(ns uxbox.ui.confirm
|
(ns uxbox.ui.confirm
|
||||||
(:require [sablono.core :as html :refer-macros [html]]
|
(:require [sablono.core :as html :refer-macros [html]]
|
||||||
|
[uxbox.data.lightbox :as udl]
|
||||||
[uxbox.ui.icons :as i]
|
[uxbox.ui.icons :as i]
|
||||||
[uxbox.ui.mixins :as mx]
|
[uxbox.ui.mixins :as mx]
|
||||||
[uxbox.util.dom :as dom]
|
[uxbox.util.dom :as dom]
|
||||||
[uxbox.ui.lightbox :as lightbox]))
|
[uxbox.ui.lightbox :as lbx]))
|
||||||
|
|
||||||
(defn- confirm-dialog-render
|
(defn- confirm-dialog-render
|
||||||
[own {:keys [on-accept on-cancel] :as ctx}]
|
[own {:keys [on-accept on-cancel] :as ctx}]
|
||||||
(letfn [(accept [event]
|
(letfn [(accept [event]
|
||||||
(dom/prevent-default event)
|
(dom/prevent-default event)
|
||||||
(lightbox/close!)
|
(udl/close!)
|
||||||
(on-accept (dissoc ctx :on-accept :on-cancel)))
|
(on-accept (dissoc ctx :on-accept :on-cancel)))
|
||||||
(cancel [event]
|
(cancel [event]
|
||||||
(dom/prevent-default event)
|
(dom/prevent-default event)
|
||||||
(lightbox/close!)
|
(udl/close!)
|
||||||
(when on-cancel
|
(when on-cancel
|
||||||
(on-cancel (dissoc ctx :on-accept :on-cancel))))]
|
(on-cancel (dissoc ctx :on-accept :on-cancel))))]
|
||||||
(html
|
(html
|
||||||
@ -41,6 +42,6 @@
|
|||||||
:name "confirm-dialog"
|
:name "confirm-dialog"
|
||||||
:mixins []}))
|
:mixins []}))
|
||||||
|
|
||||||
(defmethod lightbox/render-lightbox :confirm
|
(defmethod lbx/render-lightbox :confirm
|
||||||
[context]
|
[context]
|
||||||
(confirm-dialog context))
|
(confirm-dialog context))
|
||||||
|
|||||||
@ -16,9 +16,10 @@
|
|||||||
[uxbox.schema :as sc]
|
[uxbox.schema :as sc]
|
||||||
[uxbox.library :as library]
|
[uxbox.library :as library]
|
||||||
[uxbox.data.dashboard :as dd]
|
[uxbox.data.dashboard :as dd]
|
||||||
|
[uxbox.data.lightbox :as udl]
|
||||||
[uxbox.ui.icons :as i]
|
[uxbox.ui.icons :as i]
|
||||||
[uxbox.ui.forms :as form]
|
[uxbox.ui.forms :as form]
|
||||||
[uxbox.ui.lightbox :as lightbox]
|
[uxbox.ui.lightbox :as lbx]
|
||||||
[uxbox.ui.colorpicker :refer (colorpicker)]
|
[uxbox.ui.colorpicker :refer (colorpicker)]
|
||||||
[uxbox.ui.mixins :as mx]
|
[uxbox.ui.mixins :as mx]
|
||||||
[uxbox.ui.dashboard.header :refer (header)]
|
[uxbox.ui.dashboard.header :refer (header)]
|
||||||
@ -125,7 +126,7 @@
|
|||||||
coll-id (:collection-id dashboard)
|
coll-id (:collection-id dashboard)
|
||||||
own? (= coll-type :own)
|
own? (= coll-type :own)
|
||||||
coll (rum/react (focus-collection coll-id))
|
coll (rum/react (focus-collection coll-id))
|
||||||
edit-cb #(lightbox/open! :color-form {:coll coll :color %})
|
edit-cb #(udl/open! :color-form {:coll coll :color %})
|
||||||
remove-cb #(rs/emit! (dd/remove-color {:id (:id coll) :color %}))]
|
remove-cb #(rs/emit! (dd/remove-color {:id (:id coll) :color %}))]
|
||||||
(when coll
|
(when coll
|
||||||
(html
|
(html
|
||||||
@ -134,7 +135,7 @@
|
|||||||
[:div.dashboard-grid-content
|
[:div.dashboard-grid-content
|
||||||
(when own?
|
(when own?
|
||||||
[:div.grid-item.small-item.add-project
|
[:div.grid-item.small-item.add-project
|
||||||
{:on-click #(lightbox/open! :color-form {:coll coll})}
|
{:on-click #(udl/open! :color-form {:coll coll})}
|
||||||
[:span "+ New color"]])
|
[:span "+ New color"]])
|
||||||
(for [color (remove nil? (:colors coll))
|
(for [color (remove nil? (:colors coll))
|
||||||
:let [color-rgb (hex->rgb color)]]
|
:let [color-rgb (hex->rgb color)]]
|
||||||
@ -232,6 +233,6 @@
|
|||||||
:mixins [(rum/local {})
|
:mixins [(rum/local {})
|
||||||
mx/static]}))
|
mx/static]}))
|
||||||
|
|
||||||
(defmethod lightbox/render-lightbox :color-form
|
(defmethod lbx/render-lightbox :color-form
|
||||||
[params]
|
[params]
|
||||||
(color-lightbox params))
|
(color-lightbox params))
|
||||||
|
|||||||
@ -9,11 +9,12 @@
|
|||||||
(:require [sablono.core :as html :refer-macros [html]]
|
(:require [sablono.core :as html :refer-macros [html]]
|
||||||
[rum.core :as rum]
|
[rum.core :as rum]
|
||||||
[uxbox.rstore :as rs]
|
[uxbox.rstore :as rs]
|
||||||
|
[uxbox.data.dashboard :as dd]
|
||||||
|
[uxbox.data.lightbox :as udl]
|
||||||
[uxbox.ui.icons :as i]
|
[uxbox.ui.icons :as i]
|
||||||
[uxbox.ui.mixins :as mx]
|
[uxbox.ui.mixins :as mx]
|
||||||
[uxbox.ui.lightbox :as lightbox]
|
[uxbox.ui.lightbox :as lbx]
|
||||||
[uxbox.ui.library-bar :as ui.library-bar]
|
[uxbox.ui.library-bar :as ui.library-bar]
|
||||||
[uxbox.data.dashboard :as dd]
|
|
||||||
[uxbox.ui.dashboard.header :refer (header)]
|
[uxbox.ui.dashboard.header :refer (header)]
|
||||||
[uxbox.util.dom :as dom]))
|
[uxbox.util.dom :as dom]))
|
||||||
|
|
||||||
@ -41,7 +42,7 @@
|
|||||||
(html
|
(html
|
||||||
[:div.dashboard-grid-content
|
[:div.dashboard-grid-content
|
||||||
[:div.grid-item.add-project
|
[:div.grid-item.add-project
|
||||||
{on-click #(lightbox/open! :new-element)}
|
{on-click #(udl/open! :new-element)}
|
||||||
[:span "+ New element"]]
|
[:span "+ New element"]]
|
||||||
[:div.grid-item.project-th
|
[:div.grid-item.project-th
|
||||||
[:span.grid-item-image i/image]
|
[:span.grid-item-image i/image]
|
||||||
@ -175,7 +176,7 @@
|
|||||||
[:span.text "Upload file"]]]
|
[:span.text "Upload file"]]]
|
||||||
[:a.close {:href "#"
|
[:a.close {:href "#"
|
||||||
:on-click #(do (dom/prevent-default %)
|
:on-click #(do (dom/prevent-default %)
|
||||||
(lightbox/close!))}
|
(udl/close!))}
|
||||||
i/close]]))
|
i/close]]))
|
||||||
|
|
||||||
(def ^:const ^:private new-element-lightbox
|
(def ^:const ^:private new-element-lightbox
|
||||||
@ -183,6 +184,6 @@
|
|||||||
{:render new-element-lightbox-render
|
{:render new-element-lightbox-render
|
||||||
:name "new-element-lightbox"}))
|
:name "new-element-lightbox"}))
|
||||||
|
|
||||||
(defmethod lightbox/render-lightbox :new-element
|
(defmethod lbx/render-lightbox :new-element
|
||||||
[_]
|
[_]
|
||||||
(new-element-lightbox))
|
(new-element-lightbox))
|
||||||
|
|||||||
@ -15,9 +15,10 @@
|
|||||||
[uxbox.locales :refer (tr)]
|
[uxbox.locales :refer (tr)]
|
||||||
[uxbox.library :as library]
|
[uxbox.library :as library]
|
||||||
[uxbox.data.dashboard :as dd]
|
[uxbox.data.dashboard :as dd]
|
||||||
|
[uxbox.data.lightbox :as udl]
|
||||||
[uxbox.ui.icons :as i]
|
[uxbox.ui.icons :as i]
|
||||||
[uxbox.ui.shapes.core :as uusc]
|
[uxbox.ui.shapes.core :as uusc]
|
||||||
[uxbox.ui.lightbox :as lightbox]
|
[uxbox.ui.lightbox :as lbx]
|
||||||
[uxbox.ui.mixins :as mx]
|
[uxbox.ui.mixins :as mx]
|
||||||
[uxbox.ui.dashboard.header :refer (header)]
|
[uxbox.ui.dashboard.header :refer (header)]
|
||||||
[uxbox.util.dom :as dom]))
|
[uxbox.util.dom :as dom]))
|
||||||
@ -169,7 +170,7 @@
|
|||||||
]
|
]
|
||||||
[:a.close {:href "#"
|
[:a.close {:href "#"
|
||||||
:on-click #(do (dom/prevent-default %)
|
:on-click #(do (dom/prevent-default %)
|
||||||
(lightbox/close!))}
|
(udl/close!))}
|
||||||
i/close]]))
|
i/close]]))
|
||||||
|
|
||||||
(def new-icon-lightbox
|
(def new-icon-lightbox
|
||||||
@ -177,6 +178,6 @@
|
|||||||
{:render new-icon-lightbox-render
|
{:render new-icon-lightbox-render
|
||||||
:name "new-icon-lightbox"}))
|
:name "new-icon-lightbox"}))
|
||||||
|
|
||||||
(defmethod lightbox/render-lightbox :new-icon
|
(defmethod lbx/render-lightbox :new-icon
|
||||||
[_]
|
[_]
|
||||||
(new-icon-lightbox))
|
(new-icon-lightbox))
|
||||||
|
|||||||
@ -17,10 +17,11 @@
|
|||||||
[uxbox.data.dashboard :as dd]
|
[uxbox.data.dashboard :as dd]
|
||||||
[uxbox.data.projects :as dp]
|
[uxbox.data.projects :as dp]
|
||||||
[uxbox.data.workspace :as dw]
|
[uxbox.data.workspace :as dw]
|
||||||
|
[uxbox.data.lightbox :as udl]
|
||||||
[uxbox.ui.icons :as i]
|
[uxbox.ui.icons :as i]
|
||||||
[uxbox.util.dom :as dom]
|
[uxbox.util.dom :as dom]
|
||||||
[uxbox.ui.dashboard.header :refer (header)]
|
[uxbox.ui.dashboard.header :refer (header)]
|
||||||
[uxbox.ui.lightbox :as lightbox]
|
[uxbox.ui.lightbox :as lbx]
|
||||||
[uxbox.ui.messages :as uum]
|
[uxbox.ui.messages :as uum]
|
||||||
[uxbox.ui.mixins :as mx]
|
[uxbox.ui.mixins :as mx]
|
||||||
[uxbox.util.datetime :as dt]))
|
[uxbox.util.datetime :as dt]))
|
||||||
@ -159,7 +160,7 @@
|
|||||||
(rs/emit! (dp/delete-project project)))
|
(rs/emit! (dp/delete-project project)))
|
||||||
(on-delete [event]
|
(on-delete [event]
|
||||||
(dom/stop-propagation event)
|
(dom/stop-propagation event)
|
||||||
(lightbox/open! :confirm {:on-accept delete}))]
|
(udl/open! :confirm {:on-accept delete}))]
|
||||||
(html
|
(html
|
||||||
[:div.grid-item.project-th {:on-click on-navigate
|
[:div.grid-item.project-th {:on-click on-navigate
|
||||||
:key (:id project)}
|
:key (:id project)}
|
||||||
@ -194,7 +195,7 @@
|
|||||||
filtering (rum/react project-filtering-l)]
|
filtering (rum/react project-filtering-l)]
|
||||||
(letfn [(on-click [e]
|
(letfn [(on-click [e]
|
||||||
(dom/prevent-default e)
|
(dom/prevent-default e)
|
||||||
(lightbox/open! :new-project))]
|
(udl/open! :new-project))]
|
||||||
(html
|
(html
|
||||||
[:section.dashboard-grid
|
[:section.dashboard-grid
|
||||||
[:h2 "Your projects"]
|
[:h2 "Your projects"]
|
||||||
@ -324,12 +325,12 @@
|
|||||||
:on-click #(do
|
:on-click #(do
|
||||||
(dom/prevent-default %)
|
(dom/prevent-default %)
|
||||||
(rs/emit! (dp/create-project @local))
|
(rs/emit! (dp/create-project @local))
|
||||||
(lightbox/close!))
|
(udl/close!))
|
||||||
|
|
||||||
:type "submit"}])]
|
:type "submit"}])]
|
||||||
[:a.close {:href "#"
|
[:a.close {:href "#"
|
||||||
:on-click #(do (dom/prevent-default %)
|
:on-click #(do (dom/prevent-default %)
|
||||||
(lightbox/close!))}
|
(udl/close!))}
|
||||||
i/close]])))
|
i/close]])))
|
||||||
|
|
||||||
(def new-project-lightbox
|
(def new-project-lightbox
|
||||||
@ -338,6 +339,6 @@
|
|||||||
:name "new-project-lightbox"
|
:name "new-project-lightbox"
|
||||||
:mixins [(rum/local +project-defaults+)]}))
|
:mixins [(rum/local +project-defaults+)]}))
|
||||||
|
|
||||||
(defmethod lightbox/render-lightbox :new-project
|
(defmethod lbx/render-lightbox :new-project
|
||||||
[_]
|
[_]
|
||||||
(new-project-lightbox))
|
(new-project-lightbox))
|
||||||
|
|||||||
@ -1,30 +1,21 @@
|
|||||||
(ns uxbox.ui.lightbox
|
(ns uxbox.ui.lightbox
|
||||||
(:require [sablono.core :as html :refer-macros [html]]
|
(:require [sablono.core :as html :refer-macros [html]]
|
||||||
[rum.core :as rum]
|
[rum.core :as rum]
|
||||||
|
[lentes.core :as l]
|
||||||
|
[uxbox.state :as st]
|
||||||
|
[uxbox.data.lightbox :as udl]
|
||||||
[uxbox.ui.mixins :as mx]
|
[uxbox.ui.mixins :as mx]
|
||||||
[uxbox.ui.keyboard :as k]
|
[uxbox.ui.keyboard :as k]
|
||||||
[goog.events :as events])
|
[goog.events :as events])
|
||||||
(:import goog.events.EventType))
|
(:import goog.events.EventType))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;; --- Lentes
|
||||||
;; State Management
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
(defonce +current+ (atom nil))
|
(def ^:const ^:private lightbox-l
|
||||||
|
(-> (l/key :lightbox)
|
||||||
|
(l/focus-atom st/state)))
|
||||||
|
|
||||||
(defn open!
|
;; --- Lightbox (Component)
|
||||||
([kind]
|
|
||||||
(open! kind nil))
|
|
||||||
([kind params]
|
|
||||||
(reset! +current+ (merge {:name kind} params))))
|
|
||||||
|
|
||||||
(defn close!
|
|
||||||
[]
|
|
||||||
(reset! +current+ nil))
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
;; UI
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
(defmulti render-lightbox :name)
|
(defmulti render-lightbox :name)
|
||||||
(defmethod render-lightbox :default [_] nil)
|
(defmethod render-lightbox :default [_] nil)
|
||||||
@ -32,37 +23,37 @@
|
|||||||
(defn- on-esc-clicked
|
(defn- on-esc-clicked
|
||||||
[e]
|
[e]
|
||||||
(when (k/esc? e)
|
(when (k/esc? e)
|
||||||
(close!)))
|
(udl/close!)))
|
||||||
|
|
||||||
(defn- lightbox-will-mount
|
(defn- lightbox-will-mount
|
||||||
[own]
|
[own]
|
||||||
(let [key (events/listen js/document
|
(let [key (events/listen js/document
|
||||||
EventType.KEYDOWN
|
EventType.KEYDOWN
|
||||||
on-esc-clicked)]
|
on-esc-clicked)]
|
||||||
(assoc own ::eventkey key)))
|
(assoc own ::key key)))
|
||||||
|
|
||||||
(defn- lightbox-will-umount
|
(defn- lightbox-will-umount
|
||||||
[own]
|
[own]
|
||||||
(let [key (::eventkey own)]
|
(events/unlistenByKey (::key own))
|
||||||
(events/unlistenByKey key)
|
(dissoc own ::key))
|
||||||
(dissoc own ::eventkey)))
|
|
||||||
|
|
||||||
(defn- lightbox-transfer-state
|
(defn- lightbox-transfer-state
|
||||||
[old-own own]
|
[old-own own]
|
||||||
(assoc own ::eventkey (::eventkey old-own)))
|
(assoc own ::key (::key old-own)))
|
||||||
|
|
||||||
(defn- lightbox-render
|
(defn- lightbox-render
|
||||||
[own]
|
[own]
|
||||||
(let [params (rum/react +current+)]
|
(let [data (rum/react lightbox-l)]
|
||||||
(html
|
(html
|
||||||
[:div.lightbox {:class (when (nil? params) "hide")}
|
[:div.lightbox
|
||||||
(render-lightbox params)])))
|
{:class (when (nil? data) "hide")}
|
||||||
|
(render-lightbox data)])))
|
||||||
|
|
||||||
(def ^:static lightbox
|
(def lightbox
|
||||||
(mx/component
|
(mx/component
|
||||||
{:name "lightbox"
|
{:name "lightbox"
|
||||||
:render lightbox-render
|
:render lightbox-render
|
||||||
:transfer-state lightbox-transfer-state
|
:transfer-state lightbox-transfer-state
|
||||||
:will-mount lightbox-will-mount
|
:will-mount lightbox-will-mount
|
||||||
:will-unmount lightbox-will-umount
|
:will-unmount lightbox-will-umount
|
||||||
:mixins [rum/reactive]}))
|
:mixins [rum/reactive mx/static]}))
|
||||||
|
|||||||
@ -6,16 +6,16 @@
|
|||||||
[uxbox.rstore :as rs]
|
[uxbox.rstore :as rs]
|
||||||
[uxbox.state :as s]
|
[uxbox.state :as s]
|
||||||
[uxbox.data.auth :as da]
|
[uxbox.data.auth :as da]
|
||||||
|
[uxbox.data.lightbox :as udl]
|
||||||
[uxbox.ui.icons :as i]
|
[uxbox.ui.icons :as i]
|
||||||
[uxbox.ui.navigation :as nav]
|
[uxbox.ui.navigation :as nav]
|
||||||
[uxbox.ui.lightbox :as lightbox]
|
|
||||||
[uxbox.ui.mixins :as mx]))
|
[uxbox.ui.mixins :as mx]))
|
||||||
|
|
||||||
;; --- User Menu
|
;; --- User Menu
|
||||||
|
|
||||||
(defn menu-render
|
(defn menu-render
|
||||||
[own open?]
|
[own open?]
|
||||||
(let [open-settings-dialog #(lightbox/open! :settings)]
|
(let [open-settings-dialog #(udl/open! :settings)]
|
||||||
(html
|
(html
|
||||||
[:ul.dropdown {:class (when-not open?
|
[:ul.dropdown {:class (when-not open?
|
||||||
"hide")}
|
"hide")}
|
||||||
|
|||||||
@ -11,10 +11,11 @@
|
|||||||
[lentes.core :as l]
|
[lentes.core :as l]
|
||||||
[uxbox.rstore :as rs]
|
[uxbox.rstore :as rs]
|
||||||
[uxbox.state :as st]
|
[uxbox.state :as st]
|
||||||
|
[uxbox.data.lightbox :as udl]
|
||||||
|
[uxbox.data.workspace :as udw]
|
||||||
[uxbox.ui.icons :as i]
|
[uxbox.ui.icons :as i]
|
||||||
[uxbox.ui.mixins :as mx]
|
[uxbox.ui.mixins :as mx]
|
||||||
[uxbox.ui.lightbox :as lightbox]
|
[uxbox.ui.lightbox :as lbx]
|
||||||
[uxbox.data.workspace :as udw]
|
|
||||||
[uxbox.util.dom :as dom]
|
[uxbox.util.dom :as dom]
|
||||||
[uxbox.util.datetime :as dt]))
|
[uxbox.util.datetime :as dt]))
|
||||||
|
|
||||||
@ -29,7 +30,7 @@
|
|||||||
(defn- on-paste
|
(defn- on-paste
|
||||||
[item]
|
[item]
|
||||||
(rs/emit! (udw/paste-from-clipboard (:id item)))
|
(rs/emit! (udw/paste-from-clipboard (:id item)))
|
||||||
(lightbox/close!))
|
(udl/close!))
|
||||||
|
|
||||||
(defn- clipboard-dialog-render
|
(defn- clipboard-dialog-render
|
||||||
[own]
|
[own]
|
||||||
@ -45,7 +46,7 @@
|
|||||||
[:span (str "Copied (" (dt/timeago (:created-at item)) ")")]])]
|
[:span (str "Copied (" (dt/timeago (:created-at item)) ")")]])]
|
||||||
[:a.close {:href "#"
|
[:a.close {:href "#"
|
||||||
:on-click #(do (dom/prevent-default %)
|
:on-click #(do (dom/prevent-default %)
|
||||||
(lightbox/close!))} i/close]])))
|
(udl/close!))} i/close]])))
|
||||||
|
|
||||||
(def clipboard-dialog
|
(def clipboard-dialog
|
||||||
(mx/component
|
(mx/component
|
||||||
@ -53,6 +54,6 @@
|
|||||||
:name "clipboard-dialog"
|
:name "clipboard-dialog"
|
||||||
:mixins [mx/static rum/reactive]}))
|
:mixins [mx/static rum/reactive]}))
|
||||||
|
|
||||||
(defmethod lightbox/render-lightbox :clipboard
|
(defmethod lbx/render-lightbox :clipboard
|
||||||
[_]
|
[_]
|
||||||
(clipboard-dialog))
|
(clipboard-dialog))
|
||||||
|
|||||||
@ -13,6 +13,7 @@
|
|||||||
[uxbox.rstore :as rs]
|
[uxbox.rstore :as rs]
|
||||||
[uxbox.data.workspace :as dw]
|
[uxbox.data.workspace :as dw]
|
||||||
[uxbox.data.history :as udh]
|
[uxbox.data.history :as udh]
|
||||||
|
[uxbox.data.lightbox :as udl]
|
||||||
[uxbox.ui.workspace.clipboard]
|
[uxbox.ui.workspace.clipboard]
|
||||||
[uxbox.ui.workspace.settings]
|
[uxbox.ui.workspace.settings]
|
||||||
[uxbox.ui.workspace.base :as wb]
|
[uxbox.ui.workspace.base :as wb]
|
||||||
@ -20,7 +21,6 @@
|
|||||||
[uxbox.ui.users :as ui.u]
|
[uxbox.ui.users :as ui.u]
|
||||||
[uxbox.ui.navigation :as nav]
|
[uxbox.ui.navigation :as nav]
|
||||||
[uxbox.ui.mixins :as mx]
|
[uxbox.ui.mixins :as mx]
|
||||||
[uxbox.ui.lightbox :as lightbox]
|
|
||||||
[uxbox.util.geom.point :as gpt]
|
[uxbox.util.geom.point :as gpt]
|
||||||
[uxbox.util.math :as mth]))
|
[uxbox.util.math :as mth]))
|
||||||
|
|
||||||
@ -75,7 +75,7 @@
|
|||||||
on-undo #(rs/emit! (udh/backwards-to-previous-version))
|
on-undo #(rs/emit! (udh/backwards-to-previous-version))
|
||||||
on-redo #(rs/emit! (udh/forward-to-next-version))
|
on-redo #(rs/emit! (udh/forward-to-next-version))
|
||||||
;; TODO: temporary
|
;; TODO: temporary
|
||||||
open-confirm-dialog #(lightbox/open! :confirm)]
|
open-confirm-dialog #(udl/open! :confirm)]
|
||||||
(html
|
(html
|
||||||
[:header#workspace-bar.workspace-bar
|
[:header#workspace-bar.workspace-bar
|
||||||
[:div.main-icon
|
[:div.main-icon
|
||||||
|
|||||||
@ -15,10 +15,11 @@
|
|||||||
[uxbox.data.pages :as udp]
|
[uxbox.data.pages :as udp]
|
||||||
[uxbox.data.forms :as udf]
|
[uxbox.data.forms :as udf]
|
||||||
[uxbox.data.workspace :as udw]
|
[uxbox.data.workspace :as udw]
|
||||||
|
[uxbox.data.lightbox :as udl]
|
||||||
[uxbox.ui.icons :as i]
|
[uxbox.ui.icons :as i]
|
||||||
[uxbox.ui.mixins :as mx]
|
[uxbox.ui.mixins :as mx]
|
||||||
[uxbox.ui.forms :as forms]
|
[uxbox.ui.forms :as forms]
|
||||||
[uxbox.ui.lightbox :as lightbox]
|
[uxbox.ui.lightbox :as lbx]
|
||||||
[uxbox.ui.colorpicker :as uucp]
|
[uxbox.ui.colorpicker :as uucp]
|
||||||
[uxbox.ui.workspace.base :as wb]
|
[uxbox.ui.workspace.base :as wb]
|
||||||
[uxbox.util.dom :as dom]
|
[uxbox.util.dom :as dom]
|
||||||
@ -110,7 +111,7 @@
|
|||||||
(settings-form)
|
(settings-form)
|
||||||
[:a.close {:href "#"
|
[:a.close {:href "#"
|
||||||
:on-click #(do (dom/prevent-default %)
|
:on-click #(do (dom/prevent-default %)
|
||||||
(lightbox/close!))} i/close]]))
|
(udl/close!))} i/close]]))
|
||||||
|
|
||||||
(def settings-dialog
|
(def settings-dialog
|
||||||
(mx/component
|
(mx/component
|
||||||
@ -118,6 +119,6 @@
|
|||||||
:name "settings-dialog"
|
:name "settings-dialog"
|
||||||
:mixins []}))
|
:mixins []}))
|
||||||
|
|
||||||
(defmethod lightbox/render-lightbox :settings
|
(defmethod lbx/render-lightbox :settings
|
||||||
[_]
|
[_]
|
||||||
(settings-dialog))
|
(settings-dialog))
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
(:require [goog.events :as events]
|
(:require [goog.events :as events]
|
||||||
[beicon.core :as rx]
|
[beicon.core :as rx]
|
||||||
[uxbox.rstore :as rs]
|
[uxbox.rstore :as rs]
|
||||||
[uxbox.ui.lightbox :as lightbox]
|
[uxbox.data.lightbox :as udl]
|
||||||
[uxbox.data.workspace :as dw]
|
[uxbox.data.workspace :as dw]
|
||||||
[uxbox.data.shapes :as uds]
|
[uxbox.data.shapes :as uds]
|
||||||
[uxbox.data.history :as udh])
|
[uxbox.data.history :as udh])
|
||||||
@ -34,7 +34,7 @@
|
|||||||
:ctrl+v #(rs/emit! (dw/paste-from-clipboard))
|
:ctrl+v #(rs/emit! (dw/paste-from-clipboard))
|
||||||
:ctrl+z #(rs/emit! (udh/backwards-to-previous-version))
|
:ctrl+z #(rs/emit! (udh/backwards-to-previous-version))
|
||||||
:ctrl+shift+z #(rs/emit! (udh/forward-to-next-version))
|
:ctrl+shift+z #(rs/emit! (udh/forward-to-next-version))
|
||||||
:ctrl+shift+v #(lightbox/open! :clipboard)
|
:ctrl+shift+v #(udl/open! :clipboard)
|
||||||
:esc #(rs/emit! (uds/deselect-all))
|
:esc #(rs/emit! (uds/deselect-all))
|
||||||
:backspace #(rs/emit! (uds/delete-selected))
|
:backspace #(rs/emit! (uds/delete-selected))
|
||||||
:delete #(rs/emit! (uds/delete-selected))
|
:delete #(rs/emit! (uds/delete-selected))
|
||||||
|
|||||||
@ -20,18 +20,17 @@
|
|||||||
[uxbox.data.projects :as dp]
|
[uxbox.data.projects :as dp]
|
||||||
[uxbox.data.pages :as udp]
|
[uxbox.data.pages :as udp]
|
||||||
[uxbox.data.workspace :as dw]
|
[uxbox.data.workspace :as dw]
|
||||||
|
[uxbox.data.lightbox :as udl]
|
||||||
[uxbox.ui.dashboard.projects :refer (+layouts+)]
|
[uxbox.ui.dashboard.projects :refer (+layouts+)]
|
||||||
[uxbox.ui.workspace.base :as wb]
|
[uxbox.ui.workspace.base :as wb]
|
||||||
[uxbox.ui.icons :as i]
|
[uxbox.ui.icons :as i]
|
||||||
[uxbox.ui.mixins :as mx]
|
[uxbox.ui.mixins :as mx]
|
||||||
[uxbox.ui.lightbox :as lightbox]
|
[uxbox.ui.lightbox :as lbx]
|
||||||
[uxbox.util.lens :as ul]
|
[uxbox.util.lens :as ul]
|
||||||
[uxbox.util.data :refer (read-string parse-int)]
|
[uxbox.util.data :refer (read-string parse-int)]
|
||||||
[uxbox.util.dom :as dom]))
|
[uxbox.util.dom :as dom]))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;; --- Lenses
|
||||||
;; Lenses
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
(def ^:const pages-l
|
(def ^:const pages-l
|
||||||
(letfn [(getter [state]
|
(letfn [(getter [state]
|
||||||
@ -40,14 +39,12 @@
|
|||||||
(as-> (ul/getter getter) $
|
(as-> (ul/getter getter) $
|
||||||
(l/focus-atom $ st/state))))
|
(l/focus-atom $ st/state))))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;; --- Component
|
||||||
;; Component
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
(defn page-item-render
|
(defn page-item-render
|
||||||
[own page total active?]
|
[own page total active?]
|
||||||
(letfn [(on-edit [event]
|
(letfn [(on-edit [event]
|
||||||
(lightbox/open! :page-form {:page page}))
|
(udl/open! :page-form {:page page}))
|
||||||
|
|
||||||
(on-navigate [event]
|
(on-navigate [event]
|
||||||
(rs/emit! (dp/go-to (:project page) (:id page))))
|
(rs/emit! (dp/go-to (:project page) (:id page))))
|
||||||
@ -59,7 +56,7 @@
|
|||||||
(on-delete [event]
|
(on-delete [event]
|
||||||
(dom/prevent-default event)
|
(dom/prevent-default event)
|
||||||
(dom/stop-propagation event)
|
(dom/stop-propagation event)
|
||||||
(lightbox/open! :confirm {:on-accept delete}))]
|
(udl/open! :confirm {:on-accept delete}))]
|
||||||
(html
|
(html
|
||||||
[:li {:class (when active? "selected")
|
[:li {:class (when active? "selected")
|
||||||
:on-click on-navigate}
|
:on-click on-navigate}
|
||||||
@ -81,7 +78,7 @@
|
|||||||
(let [project (rum/react wb/project-l)
|
(let [project (rum/react wb/project-l)
|
||||||
pages (rum/react pages-l)
|
pages (rum/react pages-l)
|
||||||
current (rum/react wb/page-l)
|
current (rum/react wb/page-l)
|
||||||
create #(lightbox/open! :page-form {:page {:project (:id project)}})
|
create #(udl/open! :page-form {:page {:project (:id project)}})
|
||||||
close #(rs/emit! (dw/toggle-flag :sitemap))]
|
close #(rs/emit! (dw/toggle-flag :sitemap))]
|
||||||
(html
|
(html
|
||||||
[:div.sitemap.tool-window
|
[:div.sitemap.tool-window
|
||||||
@ -105,9 +102,7 @@
|
|||||||
:name "sitemap-toolbox"
|
:name "sitemap-toolbox"
|
||||||
:mixins [mx/static rum/reactive]}))
|
:mixins [mx/static rum/reactive]}))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;; --- Lightbox
|
||||||
;; Lightbox
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
(def ^:const +page-defaults+
|
(def ^:const +page-defaults+
|
||||||
{:width 1920
|
{:width 1920
|
||||||
@ -149,10 +144,10 @@
|
|||||||
:height (:width page)))
|
:height (:width page)))
|
||||||
(cancel [e]
|
(cancel [e]
|
||||||
(dom/prevent-default e)
|
(dom/prevent-default e)
|
||||||
(lightbox/close!))
|
(udl/close!))
|
||||||
(persist [e]
|
(persist [e]
|
||||||
(dom/prevent-default e)
|
(dom/prevent-default e)
|
||||||
(lightbox/close!)
|
(udl/close!)
|
||||||
(if edition?
|
(if edition?
|
||||||
(rs/emit! (udp/update-page-metadata page))
|
(rs/emit! (udp/update-page-metadata page))
|
||||||
(rs/emit! (udp/create-page page))))]
|
(rs/emit! (udp/create-page page))))]
|
||||||
@ -204,6 +199,6 @@
|
|||||||
:name "page-form-lightbox"
|
:name "page-form-lightbox"
|
||||||
:mixins [(mx/local)]}))
|
:mixins [(mx/local)]}))
|
||||||
|
|
||||||
(defmethod lightbox/render-lightbox :page-form
|
(defmethod lbx/render-lightbox :page-form
|
||||||
[{:keys [page]}]
|
[{:keys [page]}]
|
||||||
(page-form-lightbox page))
|
(page-form-lightbox page))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user