diff --git a/src/main/scala/microsites/MicrositeKeys.scala b/src/main/scala/microsites/MicrositeKeys.scala index d397d7f6..60884775 100644 --- a/src/main/scala/microsites/MicrositeKeys.scala +++ b/src/main/scala/microsites/MicrositeKeys.scala @@ -39,6 +39,8 @@ trait MicrositeKeys { "Optional. Microsite CSS directory. By default, it'll be the resourcesDirectory + '/microsite/css'") val micrositeJsDirectory = settingKey[File]( "Optional. Microsite Javascript directory. By default, it'll be the resourcesDirectory + '/microsite/js'") + val micrositeCDNDirectives = settingKey[CdnDirectives]( + "Optional. Microsite CDN directives lists (for css and js imports). By default, both lists are empty.") val micrositeExternalLayoutsDirectory = settingKey[File]( "Optional. Microsite external layouts directory. By default, it'll be the resourcesDirectory + '/microsite/layout'") val micrositeExternalIncludesDirectory = settingKey[File]( diff --git a/src/main/scala/microsites/MicrositesPlugin.scala b/src/main/scala/microsites/MicrositesPlugin.scala index 6d719986..f82ae8eb 100644 --- a/src/main/scala/microsites/MicrositesPlugin.scala +++ b/src/main/scala/microsites/MicrositesPlugin.scala @@ -65,6 +65,7 @@ object MicrositesPlugin extends AutoPlugin { micrositeImgDirectory := (resourceDirectory in Compile).value / "microsite" / "img", micrositeCssDirectory := (resourceDirectory in Compile).value / "microsite" / "css", micrositeJsDirectory := (resourceDirectory in Compile).value / "microsite" / "js", + micrositeCDNDirectives := CdnDirectives(), micrositeExternalLayoutsDirectory := (resourceDirectory in Compile).value / "microsite" / "layouts", micrositeExternalIncludesDirectory := (resourceDirectory in Compile).value / "microsite" / "includes", micrositeDataDirectory := (resourceDirectory in Compile).value / "microsite" / "data", @@ -114,6 +115,7 @@ object MicrositesPlugin extends AutoPlugin { micrositeImgDirectory = micrositeImgDirectory.value, micrositeCssDirectory = micrositeCssDirectory.value, micrositeJsDirectory = micrositeJsDirectory.value, + micrositeCDNDirectives = micrositeCDNDirectives.value, micrositeExternalLayoutsDirectory = micrositeExternalLayoutsDirectory.value, micrositeExternalIncludesDirectory = micrositeExternalIncludesDirectory.value, micrositeDataDirectory = micrositeDataDirectory.value, diff --git a/src/main/scala/microsites/layouts/Layout.scala b/src/main/scala/microsites/layouts/Layout.scala index 9674a3fe..b9adeb2a 100644 --- a/src/main/scala/microsites/layouts/Layout.scala +++ b/src/main/scala/microsites/layouts/Layout.scala @@ -62,6 +62,10 @@ abstract class Layout(config: MicrositeSettings) { link(rel := "stylesheet", href := s"{{site.baseurl}}/css/${css.getName}") } + val customCDNList = config.micrositeCDNDirectives.cssList map { css => + link(rel := "stylesheet", href := css) + } + List( link(rel := "stylesheet", href := "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"), @@ -71,7 +75,7 @@ abstract class Layout(config: MicrositeSettings) { href := s"{{site.url}}{{site.baseurl}}/highlight/styles/${config.highlightTheme}.css"), link(rel := "stylesheet", href := s"{{site.baseurl}}/css/style.css"), link(rel := "stylesheet", href := s"{{site.baseurl}}/css/palette.css") - ) ++ customCssList + ) ++ customCssList ++ customCDNList } def scripts: List[TypedTag[String]] = { @@ -80,6 +84,10 @@ abstract class Layout(config: MicrositeSettings) { script(src := s"{{site.url}}{{site.baseurl}}/js/${js.getName}") } + val customCDNList = config.micrositeCDNDirectives.jsList map { js => + script(src := js) + } + List( script(src := "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"), script( @@ -90,7 +98,7 @@ abstract class Layout(config: MicrositeSettings) { |}); |hljs.initHighlighting(); """.stripMargin) - ) ++ customJsList + ) ++ customJsList ++ customCDNList } def globalFooter = diff --git a/src/main/scala/microsites/microsites.scala b/src/main/scala/microsites/microsites.scala index 928e6a89..7286e8be 100644 --- a/src/main/scala/microsites/microsites.scala +++ b/src/main/scala/microsites/microsites.scala @@ -31,6 +31,7 @@ package object microsites { micrositeImgDirectory: File, micrositeCssDirectory: File, micrositeJsDirectory: File, + micrositeCDNDirectives: CdnDirectives, micrositeExternalLayoutsDirectory: File, micrositeExternalIncludesDirectory: File, micrositeDataDirectory: File, @@ -45,6 +46,8 @@ package object microsites { layout: String, metaProperties: Map[String, String] = Map.empty) + case class CdnDirectives(jsList: List[String] = Nil, cssList: List[String] = Nil) + case class ConfigYml( yamlCustomProperties: Map[String, Any] = Map.empty, yamlPath: Option[File] = None, diff --git a/src/sbt-test/microsites/config-yml/build.sbt b/src/sbt-test/microsites/config-yml/build.sbt index 1df89c81..505d1a05 100644 --- a/src/sbt-test/microsites/config-yml/build.sbt +++ b/src/sbt-test/microsites/config-yml/build.sbt @@ -26,4 +26,4 @@ check := { sys.error("property defined inline not found") if (!content.contains("permalink: pretty")) sys.error("property defined in the provided file not found") -} \ No newline at end of file +} diff --git a/src/test/scala/microsites/util/Arbitraries.scala b/src/test/scala/microsites/util/Arbitraries.scala index 56d8e9f3..77a210ab 100644 --- a/src/test/scala/microsites/util/Arbitraries.scala +++ b/src/test/scala/microsites/util/Arbitraries.scala @@ -51,6 +51,13 @@ trait Arbitraries { } yield ExtraMdFileConfig(file, target, mapArbValue) } + implicit def cdnDirectivesArbitrary: Arbitrary[CdnDirectives] = Arbitrary { + for { + jsList <- listOf[String](Arbitrary.arbitrary[String]) + cssList <- listOf[String](Arbitrary.arbitrary[String]) + } yield CdnDirectives(jsList, cssList) + } + implicit def markdownMapArbitrary: Arbitrary[Map[File, ExtraMdFileConfig]] = Arbitrary { for { n ← choose(1, 100) @@ -72,6 +79,7 @@ trait Arbitraries { micrositeImgDirectory ← Arbitrary.arbitrary[File] micrositeCssDirectory ← Arbitrary.arbitrary[File] micrositeJsDirectory ← Arbitrary.arbitrary[File] + micrositeCDNDirectives <- cdnDirectivesArbitrary.arbitrary micrositeExternalLayoutsDirectory ← Arbitrary.arbitrary[File] micrositeExternalIncludesDirectory ← Arbitrary.arbitrary[File] micrositeDataDirectory ← Arbitrary.arbitrary[File] @@ -92,6 +100,7 @@ trait Arbitraries { micrositeImgDirectory, micrositeCssDirectory, micrositeJsDirectory, + micrositeCDNDirectives, micrositeExternalLayoutsDirectory, micrositeExternalIncludesDirectory, micrositeDataDirectory,