From c8a86b39d52158e2ffcbfe043c551b78c8e3d4ab Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Thu, 7 Jan 2016 19:01:50 +0200 Subject: [PATCH] Add syntax helper for define once unnamed global instances. --- frontend/uxbox/ui/workspace/base.cljs | 5 +++-- frontend/uxbox/util/syntax.cljc | 10 ++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 frontend/uxbox/util/syntax.cljc diff --git a/frontend/uxbox/ui/workspace/base.cljs b/frontend/uxbox/ui/workspace/base.cljs index fc33de822..c3db3e696 100644 --- a/frontend/uxbox/ui/workspace/base.cljs +++ b/frontend/uxbox/ui/workspace/base.cljs @@ -1,4 +1,5 @@ (ns uxbox.ui.workspace.base + (:require-macros [uxbox.util.syntax :refer [define-once]]) (:require [beicon.core :as rx] [cats.labs.lens :as l] [uxbox.rstore :as rs] @@ -88,7 +89,7 @@ (rx/buffer 2 1) (rx/map coords-delta))) -(defonce $$drag-subscription$$ +(define-once (as-> mouse-delta-s $ (rx/filter #(deref shapes-dragging?) $) (rx/on-value $ (fn [delta] @@ -113,7 +114,7 @@ :width (- current-x start-x) :height (- current-y start-y)})) -(defonce $$selrect-subscription$$ +(define-once (let [ss (as-> (rx/from-atom selrect-dragging?) $ (rx/dedupe $) (rx/merge $ (rx/of false)) diff --git a/frontend/uxbox/util/syntax.cljc b/frontend/uxbox/util/syntax.cljc new file mode 100644 index 000000000..f39c1439b --- /dev/null +++ b/frontend/uxbox/util/syntax.cljc @@ -0,0 +1,10 @@ +(ns uxbox.util.syntax + (:refer-clojure :exclude [defonce])) + +(defmacro define-once + [& body] + (let [sym (gensym "uxbox-")] + `(cljs.core/defonce ~sym + (do ~@body + nil)))) +