Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <link href="//cdn.jsdelivr.net/picnicss/4.1.1/picnic.min.css" rel="stylesheet">
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <h1>Hello Mag.JS!</h1>
  <a target="_top" href="https://github.com/magnumjs/mag.js">GitHub</a>
  <hr/>
  <!-- FILTER PRODUCTS -->
  <div id="filter-test">
    <h3>Product search</h3>
    <input name="term" placeholder="Filter list by something" />
    <p>
      <label>
        <input name="inStockOnly" type="checkbox" /> <span class="checkable">Only show products in stock</span>
      </label>
      <ul>
        <li>Product Name: <span class="name"></span>
        </li>
      </ul>
  </div>
  <hr/>
  <script src="//rawgit.com/magnumjs/mag.js/master/mag-latest.min.js"></script>
  <script src="//rawgit.com/magnumjs/mag.js/master/dist/mag.addons.0.22.min.js"></script>
</body>
</html>
 
.hide {
  display: none;
}
a {
  display: block;
}
a:after {
  content: " \bb";
}
 
/* MagJS Example - product search - list filter example */
//Component
var FilterComponent = {
  controller: function() {
    this.term = '';
    this.inStockOnly = {
      _value: ''
    };
    this.filter = (item) => {
      if (this.term &&
        !~item.name.indexOf(this.term) || (!item.stocked && this.inStockOnly._checked)) {
        return false;
      }
      return true;
    };
  },
  view: function(state, props) {
    state.input = {
      _onInput: mag.noop
    };
    state.li = props.products.filter(state.filter);
  }
}
// data
var props = {
  products: [{
    category: 'Sporting Goods',
    price: '$49.99',
    stocked: true,
    name: 'Football'
  }, {
    category: 'Sporting Goods',
    price: '$9.99',
    stocked: true,
    name: 'Baseball'
  }, {
    category: 'Sporting Goods',
    price: '$29.99',
    stocked: false,
    name: 'Basketball'
  }, {
    category: 'Electronics',
    price: '$99.99',
    stocked: true,
    name: 'iPod Touch'
  }, {
    category: 'Electronics',
    price: '$399.99',
    stocked: false,
    name: 'iPhone 5'
  }, {
    category: 'Electronics',
    price: '$199.99',
    stocked: true,
    name: 'Nexus 7'
  }]
};
mag.module('filter-test', FilterComponent, props);
Output 300px

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

Dismiss x
public
Bin info
anonymouspro
0viewers