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.3.0/ember.debug.js"></script>
  <script src="http://builds.emberjs.com/tags/v2.3.0/ember-template-compiler.js"></script>
</head>
<body>
  <div id='app'></div>
  <pre id="logs"></pre>
  
  <script type="text/x-handlebars" id="application">
    <div data-foo="bar" data-baz="asdf"></div>
  </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({
  actions: {
    error: function(error) {
      log(error.message);
    }
  }  
});
App.FooBarBazHelper = Ember.Helper.helper(function() {});
function LogTripleCurlies(options) {
  this.options = options;
  this.syntax = null; // set by HTMLBars
}
LogTripleCurlies.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.detectTriple(node)) {
      return pluginContext.processTriple(node);
    }
  });
  return ast;
};
LogTripleCurlies.prototype.detectTriple = function(node) {
  console.log(node);
  return node.type === 'MustacheStatement' && node.escaped;
}
LogTripleCurlies.prototype.processTriple = function(node) {
  let location = calculateLocationDisplay(null, node.loc);
  log(`Usage of triple curly brackets is unsafe \`{{{${node.path.original}}}}\` at ${location}`);
}
Ember.HTMLBars.registerPlugin('ast', LogTripleCurlies);
// vendor stuff
// copied from emberjs/ember.js packages/ember-template-compiler/lib/system/calculate-location-display.js
function calculateLocationDisplay(moduleName, _loc) {
  let loc = _loc || {};
  let { column, line } = loc.start || {};
  let moduleInfo = '';
  if (moduleName) {
    moduleInfo +=  `'${moduleName}'`;
  }
  if (line !== undefined && column !== undefined) {
    if (moduleName) {
      // only prepend @ if the moduleName was present
      moduleInfo += '@ ';
    }
    moduleInfo += `L${line}:C${column}`;
  }
  if (moduleInfo) {
    moduleInfo = `(${moduleInfo}) `;
  }
  return moduleInfo;
}
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