Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
<script src="https://npmcdn.com/xstream@5.0.6/dist/xstream.min.js"></script>
<script src="https://npmcdn.com/@cycle/dom@10.0.0-rc34/dist/cycle-dom.min.js"></script>
<script src="https://npmcdn.com/@cycle/isolate@1.4.0"></script>
<script src="https://npmcdn.com/@cycle/xstream-run@3.0.2/dist/cycle.min.js"></script>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <div id="app"></div>
</body>
</html>
 
const xs = xstream.default;
const {div, span, input, label, makeDOMDriver} = CycleDOM; 
function List(sources) {
  const props = [
    {text: 'Hi'},
    {text: 'My'},
    {text: 'Ho'}
  ];
  var items = props.map(x => isolate(ListItem)({Props: xs.of(x), DOM: sources.DOM}).DOM);
  const vdom$ = xs.combine.apply(null, items)
    .map(x => div('.list', x));
  return {
    DOM: vdom$
  };
}
function ListItem(sources) {
  const domSource = sources.DOM;
  const props$ = sources.Props;
  const newValue$ = domSource
    .select('.checker')
    .events('change')
    .map(ev => ev.target.checked);
  const state$ = props$
    .map(props => newValue$
      .map(val => ({
        text: props.text, 
        checked: val
      }))
      .startWith(props)
    )
    .flatten();
  const vdom$ = state$
    .map(state => div('.list-item', [
      input('.checker', {
        attrs: {type: 'checkbox', id: state.text}
      }),
      label({attrs: {for: state.text}}, state.text),
      ' - ',
      span(state.checked? 'ON': 'off')
    ])
  );
  return {
    DOM: vdom$
};
}
Cycle.run(List, {
  DOM: makeDOMDriver('#app')
});
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
bloodyKnucklespro
0viewers