Awesome
sbt-html-js-wrap
sbt-web plugin for converting HTML files to JavaScript files wrapping the HTML.
You can use this plugin in combination with sbt-uglify to combine all project JavaScript and template files to one big file.
Add plugin
Add the plugin to project/plugins.sbt
. For example:
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
addSbtPlugin("net.eigenvalue" % "sbt-html-js-wrap" % "1.0.0")
Your project's build file also needs to enable sbt-web plugins. For example with build.sbt:
lazy val root = (project.in file(".")).enablePlugins(SbtWeb)
As with all sbt-web asset pipeline plugins you must declare their order of execution e.g.:
pipelineStages := Seq(htmlJsWrap)
Configuration
Template
By default the code generated is suitable for angular:
angular.module("templates").run(["$templateCache", function($templateCache) {
$templateCache.put("some.html","<html><body>BODY</body></html>");
}]);
The module name can be customized by:
htmlJsAngularModule := "myModule"
The complete template can be changed like this:
htmlJsTemplate := { (quotedFileName: String, quotedHtmlContent: String) =>
s"""
|angular.module(${JsString(htmlJsAngularModule.value)}).run(["$$templateCache", function($$templateCache) {
| $$templateCache.put($quotedFileName,$quotedHtmlContent);
|}]);
""".stripMargin
}
You need to import spray.json.JsString
for the JSON quoting like this
import spray.json.JsString
If you generally useful templates, I like to include them as easily available alternative settings. Please send me an email/message.
Filters
Include and exclude filters can be provided. For example to only include *Template.html files:
includeFilter in htmlJsWrap := "*Template.html"
Or to exclude a vendor vendor.html
file:
excludeFilter in htmlJsWrap := "vendor.html"
The default filter is to include all .html
files:
includeFilter in htmlJsWrap := "*.html"
License
This code is licensed under the Apache 2.0 License.