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">
    <h2>{{t "rwjblue's Ember JSBins"}}</h2>
    <div>{{t 'Some Text Here'}}</div>
    <div>Plain Text Here</div>
    {{#ignore-static-strings}}
      <div>This is not logged, because this string is wrapped in an ignore.</div>
    {{/ignore-static-strings}}
  </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.THelper = Ember.Helper.helper(function([text]) {
  return text;
});
function LogStaticStrings(options) {
  this.options = options;
  this.syntax = null; // set by HTMLBars
}
LogStaticStrings.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.detectStaticString(node)) {
      return pluginContext.processStaticString(node);
    }
    
    pluginContext.processProgram(node);
  });
  return ast;
};
LogStaticStrings.prototype.processStaticString = function(node) { 
  let locationDisplay = calculateLocationDisplay(this.options.moduleName, node.loc);
  log(`Non translated string used${locationDisplay} \`${node.chars}\``);
}
LogStaticStrings.prototype.detectStaticString = function(node) {  
  return node.type === 'TextNode' && !node.raw && node.chars.trim() !== '';
};
LogStaticStrings.prototype.processIgnoreBlock = function(node, index, childNode) { 
  let walker = new this.syntax.Walker();
  // walk all nodes under an ignore block, and 
  // mark their `TextNode`'s as "raw"
  // this prevents them from being flagged as static strings
  walker.visit(childNode, function(node) {
    if (node.type === 'TextNode') {
      node.raw = true;
    }
  });
  // remove the `{{#raw}}{{/raw}}` block, and replace it with
  // its direct children
  node.body.splice(index, 1, ...childNode.program.body);
}
LogStaticStrings.prototype.detectIgnoreBlock = function(node) {  
  return node.type === 'BlockStatement' && node.path.original === 'ignore-static-strings';
};
LogStaticStrings.prototype.processProgram = function(node) {  
  if (node.type !== 'Program') {
    return false;
  }
  for (let i = node.body.length - 1; i > 0; i--) {
    let childNode = node.body[i];
    
    if (this.detectIgnoreBlock(childNode)) {
      this.processIgnoreBlock(node, i, childNode);
    }
  }
};
Ember.HTMLBars.registerPlugin('ast', LogStaticStrings);
// 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 300px

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

Dismiss x
public
Bin info
rwjbluepro
0viewers