bem-xjst
Version:
Declarative Template Engine for the browser and server
73 lines (56 loc) • 2.37 kB
JavaScript
var bemxjst = require('../');
var bemhtml = bemxjst.bemhtml;
var templates = bemhtml.compile(function() {
block('b').content()('yay');
block('class-attr-tmpl').attrs()(function() {
return { class: 'wrong' };
});
block('databem-attr-tmpl').attrs()(function() {
return { 'data-bem': 'wrong' };
});
block('mix-mod-tmpl').mix()(function() {
return [ applyNext(), { mods: { color: 'green' } } ];
});
block('mix-elemmod-tmpl').elem('e').mix()(function() {
return [ applyNext(), { elemMods: { color: 'green' } } ];
});
}, { runtimeLint: true });
var html = templates.apply([
{ block: 'b' },
// boolean attributes
{ block: 'b', attrs: { one: true, two: 'true' } },
// mods for elem
{ block: 'c', elem: 'e', mods: { test: 'opa' } },
// class in attrs
{ block: 'class-attr-bemjson', attrs: { id: 'test', class: 'jquery' } },
{ block: 'class-attr-tmpl' },
// 'data-bem' in attrs
{ block: 'databem-attr-bemjson', attrs: { 'data-bem': { block: 'a', js: true } } },
{ block: 'databem-attr-tmpl' },
// mix the same mod
{ block: 'mix-mod', mods: { m: 1 }, mix: { mods: { m: 2 } } },
{ block: 'mix-mod', mix: [ { mods: { type: 'test' } }, { mods: { type: 'shmest' } } ] },
// mix the same mod from templates
{ block: 'mix-mod-tmpl', mods: { color: 'red' } },
{ block: 'mix-elemmod', elem: 'e', elemMods: { m: 1 }, mix: { elemMods: { m: 2 } } },
{ block: 'mix-elemmod', elem: 'e', mix: [ { elemMods: { type: 'test' } }, { elemMods: { type: 'shmest' } } ] },
// mix the same mod from templates
{ block: 'mix-elemmod-tmpl', elem: 'e', elemMods: { color: 'red' } },
// Wrong names
{ block: 'bad__name' },
{ block: 'bad_name' },
{ block: 'b', elem: 'e_e' },
{ block: 'b', elem: 'e__e' },
{ block: 'b', mods: { mod_name: 'bad' } },
{ block: 'b', mods: { mod__name: 'bad' } },
{ block: 'b', mods: { modName: 'very_bad' } },
{ block: 'b', mods: { modName: 'very__bad' } },
{ block: 'b', elem: 'e', elemMods: { mod_name: 'bad' } },
{ block: 'b', elem: 'e', elemMods: { mod__name: 'bad' } },
{ block: 'b', elem: 'e', elemMods: { modName: 'very_bad' } },
{ block: 'b', elem: 'e', elemMods: { modName: 'very__bad' } },
// Wrong mods/elemMods types
{ block: 'b', mods: { test: [ 'a', 'b' ] } },
{ block: 'b', elem: 'e', elemMods: { test: [ 'a', 'b' ] } }
]);
console.log(html);