Merge branch 'interpolation' of https://github.com/calvinmetcalf/Leaflet
* 'interpolation' of https://github.com/calvinmetcalf/Leaflet: '#1968 compiled interpolation'
This commit is contained in:
commit
1581a94fc3
@ -189,16 +189,45 @@ describe('Util', function() {
|
|||||||
|
|
||||||
describe('#template', function () {
|
describe('#template', function () {
|
||||||
it('evaluates templates with a given data object', function () {
|
it('evaluates templates with a given data object', function () {
|
||||||
var tpl = 'Hello {foo} and {bar}!';
|
var tpl = 'Hello {foo} and {baz }!';
|
||||||
|
|
||||||
var str = L.Util.template(tpl, {
|
var str = L.Util.template(tpl, {
|
||||||
foo: 'Vlad',
|
foo: 'Vlad',
|
||||||
bar: 'Dave'
|
bar: 'Dave',
|
||||||
|
baz:function(o){
|
||||||
|
return o.bar;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(str).to.eql('Hello Vlad and Dave!');
|
expect(str).to.eql('Hello Vlad and Dave!');
|
||||||
});
|
});
|
||||||
|
it('check the cache', function () {
|
||||||
|
var tpl = 'Hello {foo} and {baz }!';
|
||||||
|
|
||||||
|
var str = L.Util.templateCache[tpl]({
|
||||||
|
foo: 'ladies',
|
||||||
|
baz: function(){
|
||||||
|
return 'gentlemen';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(str).to.eql('Hello ladies and gentlemen!');
|
||||||
|
});
|
||||||
|
it('evaluates templates with a function', function () {
|
||||||
|
var tpl = L.Util.compileTemplate('Hello { foo } and { bar}!',{});
|
||||||
|
|
||||||
|
var str1 = tpl({
|
||||||
|
foo: 'Vlad',
|
||||||
|
bar: 'Dave'
|
||||||
|
});
|
||||||
|
var str2 = tpl({
|
||||||
|
foo: '{Calvin}',
|
||||||
|
bar: '{Simon}'
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(str1).to.eql('Hello Vlad and Dave!');
|
||||||
|
expect(str2).to.eql('Hello {Calvin} and {Simon}!');
|
||||||
|
});
|
||||||
it('does not modify text without a token variable', function () {
|
it('does not modify text without a token variable', function () {
|
||||||
expect(L.Util.template('foo', {})).to.eql('foo');
|
expect(L.Util.template('foo', {})).to.eql('foo');
|
||||||
});
|
});
|
||||||
|
@ -104,17 +104,33 @@ L.Util = {
|
|||||||
}
|
}
|
||||||
return ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');
|
return ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');
|
||||||
},
|
},
|
||||||
|
|
||||||
|
compileTemplate: function (str, data) {
|
||||||
|
/*jslint evil: true */
|
||||||
|
//from https://gist.github.com/padolsey/6008842
|
||||||
|
return new Function(
|
||||||
|
'o',
|
||||||
|
'return "' + (
|
||||||
|
str.replace(/\"/g, '\\"').replace(/\{ *([\w_]+) *\}/g, function (_, $1) {
|
||||||
|
if (typeof data[$1] === 'function') {
|
||||||
|
return '" + o["' + $1 + '"](o) + "';
|
||||||
|
} else {
|
||||||
|
return '" + o["' + $1 + '"] + "';
|
||||||
|
}
|
||||||
|
})
|
||||||
|
) + '";'
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
templateCache: {},
|
||||||
|
|
||||||
template: function (str, data) {
|
template: function (str, data) {
|
||||||
return str.replace(/\{ *([\w_]+) *\}/g, function (str, key) {
|
if (str in this.templateCache) {
|
||||||
var value = data[key];
|
return this.templateCache[str](data);
|
||||||
if (value === undefined) {
|
} else {
|
||||||
throw new Error('No value provided for variable ' + str);
|
this.templateCache[str] = this.compileTemplate(str, data);
|
||||||
} else if (typeof value === 'function') {
|
return this.templateCache[str](data);
|
||||||
value = value(data);
|
}
|
||||||
}
|
|
||||||
return value;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
isArray: function (obj) {
|
isArray: function (obj) {
|
||||||
|
Loading…
Reference in New Issue
Block a user