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
Save WebReflection/8f227532143e63649804 to your computer and use it in GitHub Desktop.
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

alundiak commented Sep 4, 2015

Is this kinda proposal to get rid of ES6 way? Any luck to discuss it with TC39?

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