Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Ember Starter Kit</title>
  <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/normalize/2.1.0/normalize.css">
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  <script src="http://builds.emberjs.com/tags/v2.0.1/ember.debug.js"></script>
  <script src="http://builds.emberjs.com/tags/v2.0.1/ember-template-compiler.js"></script>
</head>
<body>
  <div id='app'></div>
  <pre id="logs"></pre>
  
  <script type="text/x-handlebars">
    <h2>rwjblue's Ember JSBins</h2>
    {{input type="checkbox" checked=model.validations.attrs.username.isInvalid}}
    {{#if model.validations.attrs.username.isInvalid}}
      Static Invalid...
    {{/if}}
   
    {{#if (v-get model 'username' 'isInvalid')}}
      V-GET INVALID!
    {{/if}}
  </script>
</body>
</html>
 
/* Put your CSS here */
html, body {
    margin: 20px;
}
 
var App = Ember.Application.create({
  rootElement: '#app',
  LOG_RESOLVER: true
});
App.Router.map(function() {
});
App.ApplicationRoute = Ember.Route.extend({
  model() {
    return {
      validations: {
        attrs: {
          username: {
            isInvalid: true
          }
        }
      }
    }
  },
  actions: {
    error: function(error) {
      log(error.message);
    }
  }  
});
function MightyMorphinVGet(options) {
  this.options = options;
  this.syntax = null; // set by HTMLBars
}
MightyMorphinVGet.prototype.transform = function(ast) {
  var pluginContext = this;
  let b = this.syntax.builders;
  let walker = new this.syntax.Walker();
  walker.visit(ast, function(node) {
    if (!pluginContext.validate(node)) {
      return;
    }
        
    pluginContext.processParams(node);
    // TODO: add support for hash params
    // pluginContext.processHash(node);
  });
  return ast;
};
MightyMorphinVGet.prototype.processParams = function(node) { 
  for (var i = 0, l = node.params.length; i < l; i++) {
    let param = node.params[i];
    
    if (param.type === 'SubExpression' && param.path.original === 'v-get') {
      let replacementPath = param.params[0].original + '.validations.attrs.';
      replacementPath += param.params.slice(1).map(p => p.original).join('.');
      let newParam = this.syntax.builders.path(replacementPath);
      node.params[i] = newParam;
    }    
  }
}
MightyMorphinVGet.prototype.validate = function(node) {  
  return node.type === 'BlockStatement' || node.type === 'MustacheStatement';
};
Ember.HTMLBars.registerPlugin('ast', MightyMorphinVGet);
Ember.onerror = function(error) {
  log(error.stack);
};
function log() {
  var msg = [].slice.call(arguments).join(' ');
  logs.insertBefore(document.createTextNode("\n" + msg), logs.firstChild);
}
Output

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

Dismiss x
public
Bin info
rwjbluepro
0viewers