Ответ 1
На странице jade github:
p.
foo asdf
asdf
asdfasdfaf
asdf
asd.
выводит результат:
<p>foo asdf
asdf
asdfasdfaf
asdf
asd
.
</p>
Конечный период после p
- это то, что вы ищете.
В настоящее время я использую Jade в новом проекте. Он хорошо подходит для компоновки макетов webapp, но не для записи статического контента, например веб-страницы элементов
содержащих текст.
Например, чтобы создать такой абзац, я считаю, что мне нужно сделать это:
p
| This is my long,
| multi-line
| paragraph.
Для статической веб-страницы, полной реальных абзацев текста, использование нефрита становится бременем из-за этого символа трубы в начале каждой строки.
Есть ли какой-то синтаксический сахар для маркировки всего блока в виде текста node, поскольку символ трубы выполняется поэтапно? Или существующий фильтр, о котором я не знаю?
Одним из решений, которое я изучаю, является создание фильтра: блока или чего-то еще, что добавляет каждую строку с | а затем передает его в Jade, но нефритовая документация по созданию фильтров по меньшей мере разрежена, так что может потребоваться некоторое время, чтобы понять. Если кто-то может дать указания относительно такого решения, я был бы признателен.
На странице jade github:
p.
foo asdf
asdf
asdfasdfaf
asdf
asd.
выводит результат:
<p>foo asdf
asdf
asdfasdfaf
asdf
asd
.
</p>
Конечный период после p
- это то, что вы ищете.
После некоторых мастерингов я разработал детали фильтра, который это выполнил. Проводя ответ здесь, так как я предполагаю, что это будет полезно для других, используя нефрит.
Код для создания фильтра оказывается довольно простым:
var jade = require ("jade");
jade.filters.text = function(block, compiler){
return new TextBlockFilter(block).compile();
};
function TextBlockFilter(node) {
this.node = node;
}
TextBlockFilter.prototype.__proto__ = jade.Compiler.prototype;
TextBlockFilter.prototype.visit = function(node){
// first this is called with a node containing all the block lines
// as sub-nodes, with their first word interpreted as the node name
//
// so here, collect all the nodes' text (including its name)
// into a single Text node, and then visit that instead.
// the child nodes won't be visited - we're cutting them out of the
// parse tree
var text = new jade.nodes.Text();
for (var i=0; i < node.length; i++) {
text.push (node[i].name + (node[i].text ? node[i].text[0] : ""));
}
this.visitNode (text);
};
И тогда разметка выглядит так. Обратите внимание, что он позволяет включать в себя другой материал нефрита: текстовые блоки:
p
:text
This is my first line of text,
followed by another
and another. Now let include a jade link tag:
a(href="#" onclick="location.href='http://blahblah.com'; return false;")
:text
and follow it with even more text
and more,
etc