Open monolithed opened 11 years ago
Да я уже давно об этом говорю и как понял Антон плотно этим занят. У себя я сделал так (идея запантетовона :])
<x:log data="..."/>
xtpl.tags({
'log': {
args: ['data'],
expr: ['data'],
code: function (args){
return this.expr('console.log(@data);', args);
}
}
});
или вот например как реализуются теги <x:enter/>
и <x:switch/case/default/>
:
xtpl.tags({
'enter': {
'short': true,
replace: '\n'
},
'switch': {
args: ['select'],
expr: ['select'],
code: {
open: function (args){
return this.expr('switch(@select){', args);
},
close: '}'
}
},
'case': {
args: ['test'],
expr: ['test'],
parent: 'switch',
code: {
open: function (args){ return 'case '+args.test+':'; },
close: 'break;'
}
},
'default': {
parent: 'switch',
valid: function (node){
if( node.parent.children[node.parent.index(node)+1] ){
node.exception('must be lastChild');
}
},
code: {
open: 'default:',
close: 'break;'
}
}
});
Идея возникла в следствии того что периодически приходится писать что-то вроде:
Лично мне было бы проще написать:
или так:
Как оказалось, добавить новый тег и прочий сахар в текущей реализиции крайне проблематично для этого не предусмотрено никакого API.
Пример добавления нового тега с переменным количеством атрибутов: