info.esl 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. (../widget (lambda (options)
  2. (var model (/lib/observ/Obj
  3. "visible" (/lib/observ/Var false)
  4. "options" (/lib/observ/Var options)))
  5. (var vtree (render (model)))
  6. (var element (/lib/vdom/create vtree))
  7. (model refresh)
  8. (function render (state) (return (/h "label.device-info" (array
  9. (/h "a.device-info-icon"
  10. (object "onclick" (lambda (e)
  11. (e.stop-propagation)
  12. (model.visible.set (! state.visible)))) "ℹ")
  13. (?: state.visible (/h ".device-info-dropdown"
  14. (state.options.map (lambda render-option (o)
  15. (var type (get o 0))
  16. (var label (get o 1))
  17. (var value (get o 2))
  18. (var event (get o 3))
  19. (return (/h ".device-info-dropdown-option" (array
  20. (/h ".device-info-dropdown-option-label" (String label))
  21. (/h ".device-info-dropdown-option-value" (String value)))))))) null)))))
  22. (function refresh (state)
  23. (var next-vtree (render state))
  24. (= element (/lib/vdom/patch element (/lib/vdom/diff vtree next-vtree)))
  25. (= vtree next-vtree))
  26. (return (object
  27. "element" element
  28. "update" (lambda (prev) (model.options.set prev.options))))))