connect.esl 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. (./widget (lambda (id)
  2. (var model (/lib/observ/Obj
  3. "visible" (/lib/observ/Var false)
  4. "id" (/lib/observ/Var id)))
  5. (var vtree (render (model)))
  6. (var element (/lib/vdom/create vtree))
  7. (model refresh)
  8. (function render (state)
  9. (var samplers (/state/session/sampler))
  10. (return (./h "label.device-info" (array
  11. (./h "a.device-info-icon"
  12. (object "onclick" (lambda (e)
  13. (e.stop-propagation)
  14. (model.visible.set (! state.visible)))) "⌖")
  15. (?: state.visible
  16. (./h ".device-info-dropdown" (.map (Object.keys samplers) menu-sampler))
  17. null)))))
  18. (function menu-sampler (sampler-id)
  19. (var sampler (get (/state/session/sampler) sampler-id))
  20. (return (./h ".device-info-dropdown-option-group"
  21. (.concat
  22. (array (./h ".device-info-dropdown-option-group-label" (String id)))
  23. (sampler.clips.map (lambda (clip i)
  24. (return (./h ".device-info-dropdown-option"
  25. (object "onclick" (./emit "sequencer.connect" id sampler-id i))
  26. (array
  27. (./h ".device-info-dropdown-option-label" (String i))
  28. (./h ".device-info-dropdown-option-value" (String clip.id)))))))))))
  29. (function refresh (state)
  30. (var next-vtree (render state))
  31. (= element (/lib/vdom/patch element (/lib/vdom/diff vtree next-vtree)))
  32. (= vtree next-vtree))
  33. (return (object
  34. "element" element
  35. "update" (lambda (prev) (model.id.set prev.options))))))