Skip to content

Navigation Menu

Sign in
Sign up
This repository was archived by the owner on Sep 12, 2021. It is now read-only.

Latest commit

History

97 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

This project is not maintained anymore.

A fork can be found under: https://github.com/fkoehler/play-html-compressor

Google's HTML (and XML) Compressor for Play Framework 2 Maven Central Build Status

Gitter

Installation

In your project/Build.scala:

libraryDependencies ++= Seq(
 "com.mohiva" %% "play-html-compressor" % "0.7.1"
)

History

  • For Play Framework 2.6 use version 0.7.1
  • For Play Framework 2.5 use version 0.6.3
  • For Play Framework 2.4 use version 0.5.0
  • For Play Framework 2.3 use version 0.3.1
  • For Play Framework 2.2 use version 0.2.1
  • For Play Framework 2.1 use version 0.1-SNAPSHOT

How to use

The filter comes with built-in HtmlCompressor and XmlCompressor configurations, but it can also be used with user-defined configurations. The following two examples shows how to define the filters with the default and the user-defined configurations.

To provide the filters for your application you must define it as described in the Play Documentation (Scala, Java).

Provide filters

For Scala users

import javax.inject.Inject
import com.mohiva.play.htmlcompressor.HTMLCompressorFilter
import com.mohiva.play.xmlcompressor.XMLCompressorFilter
import play.api.http.HttpFilters
import play.api.mvc.EssentialFilter
class Filters @Inject() (
 htmlCompressorFilter: HTMLCompressorFilter,
 xmlCompressorFilter: XMLCompressorFilter)
 extends HttpFilters {
 override def filters: Seq[EssentialFilter] = Seq(
 htmlCompressorFilter,
 xmlCompressorFilter
 )
}

For Java users

import com.mohiva.play.htmlcompressor.HTMLCompressorFilter;
import com.mohiva.play.xmlcompressor.XMLCompressorFilter;
import play.mvc.EssentialFilter;
import play.http.HttpFilters;
import javax.inject.Inject;
public class DefaultFilter implements HttpFilters {
 private HTMLCompressorFilter htmlCompressorFilter;
 private XMLCompressorFilter xmlCompressorFilter;
 @Inject
 public DefaultFilter(
 HTMLCompressorFilter htmlCompressorFilter,
 XMLCompressorFilter xmlCompressorFilter) {
 this.htmlCompressorFilter = htmlCompressorFilter;
 this.xmlCompressorFilter = xmlCompressorFilter;
 }
 @Override
 public EssentialFilter[] filters() {
 return new EssentialFilter[] {
 htmlCompressorFilter.asJava(),
 xmlCompressorFilter.asJava()
 };
 }
}

Default filter

For the default filters we provide DI modules which will be automatically enabled if you pull in the dependency. You must only provide your instance of HttpFilters as described above.

User-defined filter

For user defined filters there is a little bit mor to do. First you must create your instances of the filter. As next you must provide your instance of HttpFilters as described above. At last you must provide the bindings for you created filter and disable the default DI modules.

Implement filters

For Scala users
import javax.inject.Inject
import akka.stream.Materializer
import com.googlecode.htmlcompressor.compressor.HtmlCompressor
import com.mohiva.play.htmlcompressor.HTMLCompressorFilter
import play.api.{Configuration, Environment, Mode}
class CustomHTMLCompressorFilter @Inject() (
 val configuration: Configuration, environment: Environment, val mat: Materializer)
 extends HTMLCompressorFilter {
 override val compressor: HtmlCompressor = {
 val c = new HtmlCompressor()
 if (environment.mode == Mode.Dev) {
 c.setPreserveLineBreaks(true)
 }
 c.setRemoveComments(true)
 c.setRemoveIntertagSpaces(false)
 c.setRemoveHttpProtocol(true)
 c.setRemoveHttpsProtocol(true)
 c
 }
}
For Java users
import akka.stream.Materializer;
import com.googlecode.htmlcompressor.compressor.HtmlCompressor;
import com.mohiva.play.htmlcompressor.HTMLCompressorFilter;
import play.Environment;
import play.Mode;
import play.api.Configuration;
import javax.inject.Inject;
public class CustomHTMLCompressorFilter extends HTMLCompressorFilter {
 private Configuration configuration;
 private Environment environment;
 private Materializer mat;
 @Inject
 public CustomHTMLCompressorFilter(
 Configuration configuration, Environment environment, Materializer mat) {
 this.configuration = configuration;
 this.environment = environment;
 this.mat = mat;
 }
 @Override
 public Configuration configuration() {
 return configuration;
 }
 @Override
 public HtmlCompressor compressor() {
 HtmlCompressor compressor = new HtmlCompressor();
 if (environment.mode() == Mode.DEV) {
 compressor.setPreserveLineBreaks(true);
 }
 compressor.setRemoveComments(true);
 compressor.setRemoveIntertagSpaces(true);
 compressor.setRemoveHttpProtocol(true);
 compressor.setRemoveHttpsProtocol(true);
 return compressor;
 }
 @Override
 public Materializer mat() {
 return mat;
 }
}

Provide bindings

To provide your bindings for your user defined filter you must either create a new module or you can add the binding to your default DI module. This process is detailed documented for Scala and Java users. So please refer to this documentation.

Disable default modules

To disable the default modules you must append the modules to the play.modules.disabled property in application.conf:

play.modules.disabled += "com.mohiva.play.htmlcompressor.HTMLCompressorFilterModule"
play.modules.disabled += "com.mohiva.play.xmlcompressor.XMLCompressorFilterModule"

Customize filter behaviour

You have the possibility to customize filter behaviour without using class inheritance. For that, you could adding the following keys on your application.conf file :

play.filters {
 # Mohiva Compressor
 # ~~~~~
 # https://github.com/mohiva/play-html-compressor
 compressor {
 html {
 preserveLineBreaks = false
 removeComments = true
 removeIntertagSpaces = false
 removeHttpProtocol = true
 removeHttpsProtocol = true
 }
 xml {
 removeComments = true
 removeIntertagSpaces = true
 }
 }
}

About

Google's HTML Compressor for Play Framework 2

Resources

Stars

100 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /