Skip to content

Instantly share code, notes, and snippets.

Last active August 17, 2022 04:04
  • Star 48 You must be signed in to star a gist
  • Fork 9 You must be signed in to fork a gist
Star You must be signed in to star a gist
What would you like to do?
ES6 Template like strings in ES3 compatible syntax.
// this is now a module:
var template = require('backtick-template');
// just string
const info = 'template';
`some ${info}` === template('some ${info}', {info});
// passing through a transformer
transform `some ${info}` ===
template(transform, 'some ${info}', {info});
// using it as String method
String.prototype.template = template.asMethod;
`some ${info}` === 'some ${info}'.template({info});
transform `some ${info}` ===
'some ${info}'.template(transform, {info});
Copy link

In line# 16 you can write str = this.slice(i, m.index);
instead str = this.slice(i, re.lastIndex - m[0].length);

Copy link

fixed, will update the CSP version too soon, cheers

Copy link

hooblei commented Oct 28, 2015

var f = function (_) { return 'foo'; }, v = 1;
`hm ... ${f({a: v})}`
"hm ... foo"
"hm ... ${f({a: v})}".template({
  f: function () { return 'foo'; },
  v: 1
with(this)return "hm ... "+(f({a: v)+")}"
SyntaxError: Unexpected token )
    at Function (<anonymous>)

... and fixed

Copy link

+1 for @hooblei - there is bad RE which makes } inside embedded expressions impossible.

Copy link

ramtob commented Sep 7, 2016


Copy link

bcomnes commented Dec 11, 2016

Has anyone turned this into a module instead of a prototype extend?

Copy link

@aMarCruz @hooblei @JaroslavMoravec @ramtob @bcomnes

I've rewritten the original idea from scratch and covered 100% (let's say it was an excuse to test coveralls but ... hey ...)

Best Regards

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment