Skip to content
A draggable component for OM
Clojure
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
doc
resources/public
src
.gitignore
LICENSE
README.md
project.clj

README.md

ff-om-draggable

A reusable draggable component for Om.

Usage

Add this to your project:

Clojars Project

(ns example.core
  (:require [om.core :as om :include-macros true]
            [om.dom :as dom :include-macros true]
            [ff-om-draggable.core :refer [draggable-item]]))

(def app-state (atom {:body "Hello world" :position {:left 100 :top 200}}))

(defn sample-view
  [app owner]
  (reify
    om/IRender
    (render [_]
      (dom/div nil (app :body)))))

(def draggable-sample-view
  (draggable-item sample-view [:position]))

(om/root
  draggable-sample-view
  app-state
  {:target (. js/document (getElementById "app"))})

The key thing to notice here is this function:

  (draggable-item [view keys])

The draggable-item accepts an Om view and sequence containing the path to the position information in the cursor given for the view.

In our example [:position] resolves to {:left 100 :top 200} because the data given to the sample-view is app, and app contains the position information at the :position key.

The view passed into draggable-item is initialized with a :draggable channel. This channel can be used to enable and disable dragging of a component.

(defn sample-view
  [app owner]
  (reify
    om/IRender
    (render [_]
      (let [draggable (om/get-state owner :draggable)]
        (put! draggable false)))

(def draggable-sample-view
  (draggable-item sample-view [:position]))

In the example above with put! false on draggable to disable dragging.

Example

Sample draggable

Contributing

ff-draggable-item is still in its early stages so use with caution.

Pull request are welcome.

License

Copyright © 2014 Neo

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.

You can’t perform that action at this time.