Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
ES6 Template like strings in ES3 compatible syntax.
// this is now a module:
// https://github.com/WebReflection/backtick-template#es2015-backticks-for-es3-engines--
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});
@alundiak
alundiak commented Sep 4, 2015

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

@aMarCruz

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

@WebReflection
Owner

fixed, will update the CSP version too soon, cheers

@hooblei
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
});
undefined:2
with(this)return "hm ... "+(f({a: v)+")}"
                                   ^
SyntaxError: Unexpected token )
    at Function (<anonymous>)
    ...

... and fixed

@JaroslavMoravec

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

@ramtob
ramtob commented Sep 7, 2016

+1

@bcomnes
bcomnes commented Dec 11, 2016

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

@WebReflection
Owner

@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 ...)

https://github.com/WebReflection/backtick-template#es2015-backticks-for-es3-engines--

Best Regards

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