diff --git a/frontend/deps.edn b/frontend/deps.edn index a061e97e31..d21dc993db 100644 --- a/frontend/deps.edn +++ b/frontend/deps.edn @@ -20,7 +20,7 @@ :aliases {:dev {:extra-deps {com.bhauman/rebel-readline-cljs {:mvn/version "0.1.4"} com.bhauman/rebel-readline {:mvn/version "0.1.4"} - com.bhauman/figwheel-main {:mvn/version "0.2.1"} + com.bhauman/figwheel-main {:mvn/version "0.2.3"} org.clojure/tools.namespace {:mvn/version "0.3.0"}} :extra-paths ["test"]} diff --git a/frontend/src/uxbox/main.cljs b/frontend/src/uxbox/main.cljs index 42170a443d..cefdca49e4 100644 --- a/frontend/src/uxbox/main.cljs +++ b/frontend/src/uxbox/main.cljs @@ -22,6 +22,8 @@ [uxbox.util.router :as rt] [uxbox.util.timers :as ts])) + + ;; --- i18n (declare reinit) @@ -84,8 +86,3 @@ (defn ^:after-load after-load [] (reinit)) - - - - - diff --git a/frontend/src/uxbox/main/ui/dashboard/header.cljs b/frontend/src/uxbox/main/ui/dashboard/header.cljs index a48e5600ff..e9a481ab72 100644 --- a/frontend/src/uxbox/main/ui/dashboard/header.cljs +++ b/frontend/src/uxbox/main/ui/dashboard/header.cljs @@ -20,7 +20,7 @@ (mx/defc header-link [{:keys [section content] :as props}] - (let [on-click #(st/emit! (rt/navigate section))] + (let [on-click #(st/emit! (rt/nav section))] [:a {:on-click on-click} content])) (mf/def header diff --git a/frontend/src/uxbox/main/ui/settings/header.cljs b/frontend/src/uxbox/main/ui/settings/header.cljs index 2275367403..3103187aff 100644 --- a/frontend/src/uxbox/main/ui/settings/header.cljs +++ b/frontend/src/uxbox/main/ui/settings/header.cljs @@ -6,45 +6,51 @@ ;; Copyright (c) 2015-2017 Juan de la Cruz (ns uxbox.main.ui.settings.header - (:require [potok.core :as ptk] - [lentes.core :as l] - [uxbox.util.i18n :refer [tr]] - [uxbox.util.router :as r] - [uxbox.main.store :as st] - [uxbox.main.data.auth :as da] - [uxbox.main.data.projects :as dp] - [uxbox.main.ui.navigation :as nav] - [uxbox.builtins.icons :as i] - [uxbox.main.ui.users :refer [user]] - [rumext.core :as mx :include-macros true])) + (:require + [lentes.core :as l] + [rumext.alpha :as mf] + [uxbox.builtins.icons :as i] + [uxbox.main.data.auth :as da] + [uxbox.main.data.projects :as dp] + [uxbox.main.store :as st] + [uxbox.main.ui.navigation :as nav] + [uxbox.main.ui.users :refer [user]] + [uxbox.util.i18n :refer [tr]] + [uxbox.util.router :as rt])) (def ^:private section-ref (-> (l/in [:route :id]) (l/derive st/state))) -(mx/defc header-link - [section content] - (let [link (r/route-for section)] - [:a {:href (str "/#" link)} content])) +(mf/defc header-link + [{:keys [section content] :as props}] + (let [on-click #(st/emit! (rt/nav section))] + [:a {:on-click on-click} content])) -(mx/defc header - {:mixins [mx/static mx/reactive]} - [] - (let [section (mx/react section-ref) - profile? (= section :settings/profile) - password? (= section :settings/password) - notifications? (= section :settings/notifications)] - [:header#main-bar.main-bar - [:div.main-logo - (header-link :dashboard/projects i/logo)] - [:ul.main-nav - [:li {:class (when profile? "current")} - (header-link :settings/profile (tr "settings.profile"))] - [:li {:class (when password? "current")} - (header-link :settings/password (tr "settings.password"))] - [:li {:class (when notifications? "current")} - (header-link :settings/notifications (tr "settings.notifications"))] - [:li {:on-click #(st/emit! (da/logout))} - (header-link :auth/login (tr "settings.exit"))]] - (user)])) +(mf/def header + :mixins [mf/static mf/reactive] + :render + (fn [own props] + (let [section (mf/react section-ref) + profile? (= section :settings/profile) + password? (= section :settings/password) + notifications? (= section :settings/notifications)] + [:header#main-bar.main-bar + [:div.main-logo + [:& header-link {:section :dashboard/projects + :content i/logo}]] + [:ul.main-nav + [:li {:class (when profile? "current")} + [:& header-link {:setion :settings/profile + :content (tr "settings.profile")}]] + [:li {:class (when password? "current")} + [:& header-link {:section :settings/password + :content (tr "settings.password")}]] + [:li {:class (when notifications? "current")} + [:& header-link {:section :settings/notifications + :content (tr "settings.notifications")}]] + [:li {:on-click #(st/emit! (da/logout))} + [:& header-link {:section :auth/login + :content (tr "settings.exit")}]]] + (user)]))) diff --git a/frontend/src/uxbox/main/ui/users.cljs b/frontend/src/uxbox/main/ui/users.cljs index 0dd1fe01ee..2261194ef7 100644 --- a/frontend/src/uxbox/main/ui/users.cljs +++ b/frontend/src/uxbox/main/ui/users.cljs @@ -9,7 +9,7 @@ [cuerdas.core :as str] [lentes.core :as l] [potok.core :as ptk] - [rumext.core :as mx :include-macros true] + [rumext.alpha :as mf] [uxbox.builtins.icons :as i] [uxbox.main.data.auth :as da] [uxbox.main.data.lightbox :as udl] @@ -20,17 +20,16 @@ ;; --- User Menu -(mx/defc user-menu - {:mixins [mx/static]} - [open?] - [:ul.dropdown {:class (when-not open? "hide")} - [:li {:on-click #(st/emit! (rt/navigate :settings/profile))} +(mf/defc user-menu + [props] + [:ul.dropdown #_{:class (when-not open? "hide")} + [:li {:on-click #(st/emit! (rt/nav :settings/profile))} i/user [:span (tr "ds.user.profile")]] - [:li {:on-click #(st/emit! (rt/navigate :settings/password))} + [:li {:on-click #(st/emit! (rt/nav :settings/password))} i/lock [:span (tr "ds.user.password")]] - [:li {:on-click #(st/emit! (rt/navigate :settings/notifications))} + [:li {:on-click #(st/emit! (rt/nav :settings/notifications))} i/mail [:span (tr "ds.user.notifications")]] [:li {:on-click #(st/emit! (da/logout))} @@ -43,17 +42,19 @@ (-> (l/key :profile) (l/derive st/state))) -(mx/defcs user - {:mixins [mx/static mx/reactive (mx/local {:open false})]} - [own] - (let [profile (mx/react profile-ref) - local (::mx/local own) - photo (if (str/empty? (:photo profile "")) - "/images/avatar.jpg" - (:photo profile))] - [:div.user-zone {:on-click #(st/emit! (rt/navigate :settings/profile)) - :on-mouse-enter #(swap! local assoc :open true) - :on-mouse-leave #(swap! local assoc :open false)} - [:span (:fullname profile)] - [:img {:src photo}] - (user-menu (:open @local))])) +(mf/def user + :mixins [mf/static mf/reactive (mf/local false)] + + :render + (fn [{:keys [::mf/local] :as own} props] + (let [profile (mf/react profile-ref) + photo (if (str/empty? (:photo profile "")) + "/images/avatar.jpg" + (:photo profile))] + [:div.user-zone {:on-click #(st/emit! (rt/navigate :settings/profile)) + :on-mouse-enter #(reset! local true) + :on-mouse-leave #(reset! local false)} + [:span (:fullname profile)] + [:img {:src photo}] + (when @local + [:& user-menu])]))) diff --git a/frontend/src/uxbox/main/ui/workspace/canvas.cljs b/frontend/src/uxbox/main/ui/workspace/canvas.cljs index f9d2412068..907307b4c1 100644 --- a/frontend/src/uxbox/main/ui/workspace/canvas.cljs +++ b/frontend/src/uxbox/main/ui/workspace/canvas.cljs @@ -278,5 +278,3 @@ (when (contains? flags :ruler) (ruler zoom)) (selrect)]])))) - - diff --git a/frontend/src/uxbox/main/ui/workspace/clipboard.cljs b/frontend/src/uxbox/main/ui/workspace/clipboard.cljs index 3222709760..8074f5ec6e 100644 --- a/frontend/src/uxbox/main/ui/workspace/clipboard.cljs +++ b/frontend/src/uxbox/main/ui/workspace/clipboard.cljs @@ -6,39 +6,42 @@ ;; Copyright (c) 2015-2016 Juan de la Cruz (ns uxbox.main.ui.workspace.clipboard - (:require [lentes.core :as l] - [potok.core :as ptk] - [rumext.core :as mx :include-macros true] - [uxbox.main.store :as st] - [uxbox.main.data.lightbox :as udl] - [uxbox.main.data.workspace :as udw] - [uxbox.builtins.icons :as i] - [uxbox.main.ui.lightbox :as lbx] - [uxbox.util.dom :as dom] - [uxbox.util.time :as dt])) + (:require + [lentes.core :as l] + [potok.core :as ptk] + [rumext.alpha :as mf] + [uxbox.builtins.icons :as i] + [uxbox.main.data.lightbox :as udl] + [uxbox.main.data.workspace :as udw] + [uxbox.main.store :as st] + [uxbox.main.ui.lightbox :as lbx] + [uxbox.util.dom :as dom] + [uxbox.util.time :as dt])) -(def ^:private clipboard-ref - (-> (l/key :clipboard) - (l/derive st/state))) +(mf/def clipboard-dialog + :mixins [mf/reactive] + :init + (fn [own props] + (assoc own ::clipboard (-> (l/key :clipboard) + (l/derive st/state)))) -(mx/defc clipboard-dialog - {:mixins [mx/static mx/reactive]} - [] - (letfn [(on-paste [item] - (st/emit! (udw/paste-from-clipboard (:id item))) - (udl/close!)) - (on-close [event] - (dom/prevent-default event) - (udl/close!))] - [:div.lightbox-body.clipboard - [:div.clipboard-list - (for [item (mx/react clipboard-ref)] - [:div.clipboard-item - {:key (str (:id item)) - :on-click (partial on-paste item)} - [:span.clipboard-icon i/box] - [:span {} (str "Copied (" (dt/timeago (:created-at item)) ")")]])] - [:a.close {:href "#" :on-click on-close} i/close]])) + :render + (fn [own props] + [] + (letfn [(on-paste [item] + (st/emit! (udw/paste-from-clipboard (:id item))) + (udl/close!)) + (on-close [event] + (dom/prevent-default event) + (udl/close!))] + [:div.lightbox-body.clipboard + [:div.clipboard-list + (for [item (mf/react (::clipboard own))] + [:div.clipboard-item {:key (str (:id item)) + :on-click (partial on-paste item)} + [:span.clipboard-icon i/box] + [:span (str "Copied (" (dt/timeago (:created-at item)) ")")]])] + [:a.close {:href "#" :on-click on-close} i/close]]))) (defmethod lbx/render-lightbox :clipboard [_] diff --git a/frontend/src/uxbox/main/ui/workspace/grid.cljs b/frontend/src/uxbox/main/ui/workspace/grid.cljs index 4eb9d97e98..e1d4a5381a 100644 --- a/frontend/src/uxbox/main/ui/workspace/grid.cljs +++ b/frontend/src/uxbox/main/ui/workspace/grid.cljs @@ -6,36 +6,38 @@ ;; Copyright (c) 2015-2017 Juan de la Cruz (ns uxbox.main.ui.workspace.grid - (:require [cuerdas.core :as str] - [uxbox.main.constants :as c] - [uxbox.main.refs :as refs] - [rumext.core :as mx :include-macros true])) + (:require + [cuerdas.core :as str] + [rumext.alpha :as mf] + [uxbox.main.constants :as c] + [uxbox.main.refs :as refs])) ;; --- Grid (Component) (declare vertical-line) (declare horizontal-line) -(mx/defcs grid - {:mixins [mx/static mx/reactive]} - [own] - (let [options (:metadata (mx/react refs/selected-page)) - color (:grid-color options "#cccccc") - width c/viewport-width - height c/viewport-height - x-ticks (range (- 0 c/canvas-start-x) - (- width c/canvas-start-x) - (:grid-x-axis options 10)) +(mf/def grid + :mixins [mf/static mf/reactive] + :render + (fn [own props] + (let [options (:metadata (mf/react refs/selected-page)) + color (:grid-color options "#cccccc") + width c/viewport-width + height c/viewport-height + x-ticks (range (- 0 c/canvas-start-x) + (- width c/canvas-start-x) + (:grid-x-axis options 10)) - y-ticks (range (- 0 c/canvas-start-x) - (- height c/canvas-start-x) - (:grid-y-axis options 10)) + y-ticks (range (- 0 c/canvas-start-x) + (- height c/canvas-start-x) + (:grid-y-axis options 10)) - path (as-> [] $ - (reduce (partial vertical-line height) $ x-ticks) - (reduce (partial horizontal-line width) $ y-ticks))] - [:g.grid {:style {:pointer-events "none"}} - [:path {:d (str/join " " path) :stroke color :opacity "0.3"}]])) + path (as-> [] $ + (reduce (partial vertical-line height) $ x-ticks) + (reduce (partial horizontal-line width) $ y-ticks))] + [:g.grid {:style {:pointer-events "none"}} + [:path {:d (str/join " " path) :stroke color :opacity "0.3"}]]))) ;; --- Helpers