Fork me on GitHub
#clojure-russia
<
2016-09-08
>
andre06:09:30

If you use clojure.spec for your annotations like in the example you also get test data generation for free. This means you can generate many valid inputs for any rendering function (including the root of your application) and repeatedly check it doesn’t break.

andre06:09:46

прикольн

andre06:09:10

у меня все это есть, но только руками, как раз хотел прикрутить clojure.spec

alexclear09:09:17

Коллеги, а снимите с ручника pls https://github.com/alexclear/odva/blob/master/src/odva/server.clj#L44 Чего-то у меня не печатается ничего В REPL когда печатаю то же самое - печатается WTF?

artemyarulin09:09:36

(doall (map … ну или покороче но не так явно (mapv …

alexclear09:09:51

Ага, понял, спасибо!

olegakbarov09:09:34

гайс, а где посмотреть примеры drag-and-drop в ClojureScript? Хочется без jquery

olegakbarov09:09:25

спасибо, это уже посмотрел

misha10:09:40

@olegakbarov может что-то конкретное тогда неясно?

olegakbarov10:09:30

не понимаю как заимплементить sortable list Хочу после drag-start вешать обработчик на MOUSEMOVE и на основе этого двигать дивы, но это работает только с .preventDefault

(defn on-drag-start [e]
  (.preventDefault e)
  (events/listen js/window EventType.MOUSEMOVE
                 (mouse-move-handler))
  (events/listen js/window EventType.MOUSEUP
                 (mouse-up-handler mouse-move-handler))

  (set-cursor! "move")
  (let [id (.-id (.-dataset (.-currentTarget e)))]
    (reset! drag-id id)))

(defn on-drag-end [e]
  (.preventDefault e)
  (events/unlisten js/window EventType.MOUSEMOVE
                   mouse-move-handler))

misha10:09:10

типа взял див и начал ему место в списке искать? и чтобы все дивы двигались место уступали?

olegakbarov10:09:55

если делать preventDefault то пропадает сам айтем (картинку вставлять не хочу)

misha10:09:56

(во многих примерах превент дефолт видел)

olegakbarov10:09:52

я так понял с превентДефолтом люди голый mousemove юзают и игнорируют html5 dnd api

olegakbarov10:09:31

спасибо

olegakbarov10:09:33

еще глупый вопрос: эти события (:on-drag-start и тд) — это реагент или hiccup? я чет ни там, ни там в сорсах не нашел

(defn allow-drop [e]
  (.preventDefault e)) ;; because DnD in HTMl5 is crazy...

:draggable true ; -> otherwise the browser won't let you drag it
:on-drag-over allow-drop
:on-drag-enter allow-drop
:on-drag-start #(.setData (.-dataTransfer %) "text/plain" "") ;; for Firefox. You MUST set something as data.
:on-drag-end some-action
:on-drop some-other-action

misha14:09:41

реагент вроде макрой генерит, либо всё, что ты ему дашь, в какую-нибудь (kebab->camel-case) отдает и надеется на лучшее

kishanov19:09:23

Реагент берет мапу пропертей, конвертит их ипользуя util/dash-to-camel функцию и отдает реакту. Дальше реакт смотрит на список поддерживаемых событий (https://facebook.github.io/react/docs/events.html#mouse-events) и если то, что сгенерилось (например onDrop) есть в списке - отдает на процессинг. Если опечататься - реагент ругаться не будет, реакт скорее всего тоже

kishanov19:09:28

есть правда одно исключение: когда работаешь с svg, там есть аттрибуты типа “xlink:href” - их надо по другому определять

olegakbarov20:09:13

спасибо!