2012-04-16 2 views
1

Предположим, что это довольно легко, но с трудом распечатывания NodeSeq из HTML тегов с новой строкой (так при просмотре источника в веб-браузере, я могу сканировать сверху-снизу)Scala NodeSeq уменьшить/foldLeft с новой строкой

Как и в случае, NodeSeq печатается как одна длинная строка.

пример кода:

listOfPaths map (jsNode(_)) reduce (_++_) 

def jsNode(path: String): NodeSeq = 
    <script type="text/javascript" src={"/static/js/"+path}></script> 

Итак, как получить \ п в конце каждого узла?

Благодаря

ответ

4

Это действительно работа для того, что Вы используете для визуализации HTML. Например, если вы используете scala.xml.PrettyPrinter, вы могли бы сделать что-то вроде этого:

val printer = new xml.PrettyPrinter(80, 2) 
val paths = List("script-1.js", "script-2.js") 
val header = <head>{paths map (jsNode(_)) reduce (_++_)}</head> 

Теперь, когда вы звоните printer.format(header), вы получите следующее:

<head> 
    <script type="text/javascript" src="/static/js/script-1.js"></script> 
    <script type="text/javascript" src="/static/js/script-2.js"></script> 
</head> 

Обратите внимание, что первый аргумент конструктор PrettyPrinter определяет ширину страницы, а второй - количество отступов до отступа.

Если вы просто хотите что-то быстро и грязно, вы можете опустить текстовый узел между (или после) элементов:

paths map (jsNode(_)) reduce (_++ Text("\n") ++ _) 

Но другое решение почти всегда предпочтительнее.

+0

спасибо, последний, быстрый и грязный, делает трюк прямо сейчас: просто хочу быстро визуально разобрать вывод, в производстве google mod_pagespeed будет сжимать весь источник html на одну длинную нечитаемую строку; – virtualeyes

Смежные вопросы