Is it possible to prettify scala templates using play framework 2?

code-formatting, playframework, playframework-2.0, scala-template

Solution

So for more details I've used @biesor answer and went through these steps:

Add HtmlCompressor as a plugin

In Build.scala:

val appDependencies = Seq(
    "com.googlecode.htmlcompressor" % "htmlcompressor" % "1.5.2"
)

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;
    }
}

Then every controllers should extend `PrettyController`.

Problem

Using Play Framework 2 I've noticed the rendered Scala HTML templates don't like indented `@if` or `@for`. So, for example, something like that: ``` <ul> @for(test <- tests) { <li>@test.name</li> } </ul> ``` Will have extra unneeded spaces. To fix it, I need to do something like that: ``` <ul> @for(test <- tests) { <li>@test.name</li> } </ul> ``` Which will get messy with additional `@defining` or other statements. So, is there a way to prettify/beautify Scala templates rendering in order to get rid of extra white spaces? UPDATE: Reading this thread I've noticed extra spaces and line breaks are added as well because of the parameters on top of the templates. So this: ``` @(myParam: String) <!DOCTYPE html> <html> <head></head> <body></body> </html> ``` will add 3 extra line breaks on top of the resulting HTML. Which is definitely annoying. The thread seems to say there are no option at the moment to correct that.

Original source