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/>
  <div id="mount"></div>
  <script src="//rawgit.com/magnumjs/mag.js/master/src/addons/jsonml/affix.js"></script>
  <script src="//rawgit.com/magnumjs/mag.js/master/mag-latest.min.js"></script>
</body>
</html>
 
.hide {
  display: none;
}
a {
  display: block;
}
a:after {
  content: " \bb";
}
 
/* MagJS Example - Dynamic Element as Node */
//Html in JS is ugly, but some edge cases require it
//E.g. non-document (unattached) dom manipulation:
//Module:
var component = {
  view: function(state, props) {
    console.log(props.randomer)
    state.h2 = 'Hello ' + props.name + '!';
    state.random = props.randomer;
    state.button = {
      _onClick: function() {
        props.randomer = Math.random();
      }
    };
  }
};
//Props:
var props = {
  name: 'Mike'
};
//Generate Html:
var dom = affix('div#test h2[html="Hiya"] > random');
dom.affix('button[html="Click!"]');
//Run module with dom node:
var mod = mag.module(dom, component, props);
//Inspect the html to verify only the changed elements are being updated
//Reference element (not cloned) can be used and updated anywhere
//Attach dom node to document now or later
document.getElementById('mount').appendChild(dom);
mod.subscribe(function(state, props, node, previous) {
  console.log(state, props, node.innerHTML, previous);
  //Node Can be output as string and used elsewhere: 
  //E.g. conversion of Html to another format e.g. JSONML, XML, JSON .. 
  //document.getElementById('mount').appendChild(dom[0]);
});
Output 300px

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

Dismiss x
public
Bin info
anonymouspro
0viewers