I'm trying to create some sort of class="active"
functionality using Twirl and Play 2.3 but I can't find a solution that works, is short and doesn't throw my Intellij syntax all over the place.
This is what I currently have:
<ul class="nav navbar-nav">
<li @(if (request.uri == "/") Html("""class="active""""))><a href="@routes.Application.home()">Home</a></li>
<li @(if (request.uri == "/about") Html("""class="active""""))><a href="@routes.Application.about()">About</a></li>
<li @(if (request.uri == "/features") Html("""class="active""""))><a href="@routes.Application.features()">Features</a></li>
</ul>
And this is what Intellij thinks of it:
Yeah, IntelliJ sometimes is confused with view's syntax, anyway you can create i.e. custom util for adding (or not) the active class (Java sample)
package utils;
import play.api.templates.Html;
import play.mvc.Http;
public class AttrHelpers {
public static Html setActiveClass(String requiredPath, Http.Request request) {
return (requiredPath.equals(request.uri())) ? Html.apply("class=\"active\"") : null;
}
}
So then you can use it in your views like:
<li @utils.AttrHelpers.setActiveClass("/about", request) >
<a href="@routes.Application.about()">About</a>
</li>
<li @utils.AttrHelpers.setActiveClass("/features", request) >
<a href="@routes.Application.features()">Features</a>
</li>