是否可以使用播放框架2来美化scala模板?

Rom*_*iel 18 code-formatting playframework playframework-2.0 scala-template

使用Play Framework 2我注意到渲染的Scala HTML模板不喜欢缩进@if@for.

所以,例如,类似的东西:

<ul>
   @for(test <- tests) {
      <li>@test.name</li>
   }
</ul>
Run Code Online (Sandbox Code Playgroud)

会有额外不需要的空间.要修复它,我需要做类似的事情:

<ul>
@for(test <- tests) {
   <li>@test.name</li>
}
</ul>
Run Code Online (Sandbox Code Playgroud)

哪些会使附加@defining或其他声明变得混乱.

那么,有没有办法美化/美化Scala模板渲染以摆脱额外的空白?

更新:

阅读这个帖子我注意到因为模板顶部的参数而添加了额外的空格和换行符.所以这:

@(myParam: String)


<!DOCTYPE html>
<html>
   <head></head>
   <body></body>
</html>
Run Code Online (Sandbox Code Playgroud)

将在生成的HTML之上添加3个额外的换行符.这绝对是烦人的.

该线程似乎表示目前没有选择来纠正这个问题.

Rom*_*iel 17

所以有关详细信息,我使用了@biesor回答并完成了以下步骤:

添加HtmlCompressor作为插件

在Build.scala中:

val appDependencies = Seq(
    "com.googlecode.htmlcompressor" % "htmlcompressor" % "1.5.2"
)
Run Code Online (Sandbox Code Playgroud)

PrettyController

public class PrettyController extends Controller {

    public static Results.Status ok(Content content) {
        return Results.ok(prettify(content)).as("text/html; charset=utf-8");        
    }

    public static Results.Status badRequest(Content content) {
        return Results.badRequest(prettify(content)).as("text/html; charset=utf-8");        
    }

    public static Results.Status notFound(Content content) {
        return Results.notFound(prettify(content)).as("text/html; charset=utf-8");      
    }

    public static Results.Status forbidden(Content content) {
        return Results.forbidden(prettify(content)).as("text/html; charset=utf-8");     
    }

    public static Results.Status internalServerError(Content content) {
        return Results.internalServerError(prettify(content)).as("text/html; charset=utf-8");       
    }

    public static Results.Status unauthorized(Content content) {
        return Results.unauthorized(prettify(content)).as("text/html; charset=utf-8");      
    }

    private static String prettify(Content content) {
        HtmlCompressor compressor = new HtmlCompressor();
        String output = content.body().trim();

        if (Play.isDev()) {
            compressor.setPreserveLineBreaks(true);
        }

        output = compressor.compress(output);

        return output;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后每个控制器应该扩展PrettyController.

  • 我想知道这是否可以在编译时完成,所以漂亮的版本是嵌入在结果类中的版本,而不是必须在每个请求上美化它. (3认同)

akk*_*kie 8

我已经发布了适用于Play 2.1的Google HTML Compressor插件.你可以在GitHub上找到它.