Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
<script src="https://static.jsbin.com/js/vendor/traceur.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.0.7/rx.all.js"></script>
<script src="https://rawgit.com/cyclejs/cycle-core/v6.0.0/dist/cycle.js"></script>
<script src="https://rawgit.com/cyclejs/cycle-dom/v9.0.2/dist/cycle-dom.js"></script>
<script src="https://rawgit.com/cyclejs/isolate/v1.1.1/dist/cycle-isolate.js"></script>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <div id="app"></div>
</body>
</html>
 
const {div, h, p, button, ul, li, makeDOMDriver} = CycleDOM;
const {Observable} = Rx;
const isolate = CycleIsolate;
function OriginalInput(sources) {
  const input$ = sources.DOM
    .events('input')
    .map(ev => ev.target.value);
  
  const vtree$ = sources.Assign
    .merge(input$)
    .startWith(null)
    .map(value =>
      h('input', {
        type: 'text',
        value
      })
    );
  
  return {
    DOM: vtree$,
    Values: input$
  };
}
const Input = s => isolate(OriginalInput)(s);
function main(sources) { 
  const add$ = sources.DOM.select('.add')
    .events('click').map(null);
  const input = Input({
    Assign: add$.map(() => ''),
    DOM: sources.DOM
  });
  const list$ = input.Values.flatMapLatest(text => add$.first().map(text))
    .startWith([])
    .scan((acc, curr) => acc.concat(curr));
  
  const vtree$ = list$.combineLatest(input.DOM, 
    (list, inputDOM) =>
      div([
        inputDOM,
        button('.add', 'Add'),
        ul(list.map(item => li(item)))
      ])
    );
  
  return {
    DOM: vtree$,
  };
}
Cycle.run(main, {
  DOM: makeDOMDriver('#app')
});
Output

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

Dismiss x
public
Bin info
Hypnosphipro
0viewers