From 37d7b6439507fc23a5c70bce691f8d9a9a7123e1 Mon Sep 17 00:00:00 2001 From: Juan Pedro Moreno Date: Wed, 22 Mar 2017 00:22:58 +0100 Subject: [PATCH] Integrates sbt-org-policies * Upgrades sbt version * Upgrades sbt-ghpages plugin version * Moves the artifact to groupId com.47deg --- .scalafmt | 2 - .scalafmt.conf | 23 ++ build.sbt | 117 +------ .../main/scala/kazari/KazariUIBehavior.scala | 285 ++++++++++-------- project/ProjectPlugin.scala | 108 +++++++ project/build.properties | 2 +- project/plugins.sbt | 10 +- .../scala/microsites/MicrositesPlugin.scala | 37 +-- .../scala/microsites/layouts/HomeLayout.scala | 87 ++++-- .../scala/microsites/layouts/Layout.scala | 116 ++++--- .../layouts/MenuPartialLayout.scala | 23 +- .../scala/microsites/layouts/PageLayout.scala | 57 ++-- src/main/scala/microsites/microsites.scala | 96 +++--- .../scala/microsites/util/FileHelper.scala | 12 +- .../microsites/util/MicrositeHelper.scala | 55 ++-- .../scala/microsites/util/Arbitraries.scala | 36 ++- 16 files changed, 613 insertions(+), 453 deletions(-) delete mode 100644 .scalafmt create mode 100644 .scalafmt.conf create mode 100644 project/ProjectPlugin.scala diff --git a/.scalafmt b/.scalafmt deleted file mode 100644 index ecaf53a4..00000000 --- a/.scalafmt +++ /dev/null @@ -1,2 +0,0 @@ -style = defaultWithAlign -maxColumn = 100 \ No newline at end of file diff --git a/.scalafmt.conf b/.scalafmt.conf new file mode 100644 index 00000000..106c0cc5 --- /dev/null +++ b/.scalafmt.conf @@ -0,0 +1,23 @@ +style = defaultWithAlign +maxColumn = 100 + +continuationIndent.callSite = 2 + +newlines { + sometimesBeforeColonInMethodReturnType = false +} + +align { + arrowEnumeratorGenerator = false + ifWhileOpenParen = false + openParenCallSite = false + openParenDefnSite = false +} + +docstrings = JavaDoc + +rewrite { + rules = [SortImports, RedundantBraces] + redundantBraces.maxLines = 1 +} + \ No newline at end of file diff --git a/build.sbt b/build.sbt index 12b554ad..29db66c4 100644 --- a/build.sbt +++ b/build.sbt @@ -1,124 +1,25 @@ -import sbt.Keys._ -import de.heikoseeberger.sbtheader.license.Apache2_0 -import catext.Dependencies._ - -val dev = Seq(Dev("47 Degrees (twitter: @47deg)", "47 Degrees")) -val gh = GitHubSettings("com.fortysevendeg", "sbt-microsites", "47 Degrees", apache) -val vAll = Versions(versions, libraries, scalacPlugins) - -lazy val artifactSettings = Seq( - name := gh.proj, - organization := gh.org, - organizationName := gh.publishOrg, - homepage := Option(url("http://www.47deg.com")), - organizationHomepage := Some(new URL("http://47deg.com")), - headers := Map( - "scala" -> Apache2_0("2016", "47 Degrees, LLC. ") - ) -) - -pgpPassphrase := Some(sys.env.getOrElse("PGP_PASSPHRASE", "").toCharArray) -pgpPublicRing := file(s"${sys.env.getOrElse("PGP_FOLDER", ".")}/pubring.gpg") -pgpSecretRing := file(s"${sys.env.getOrElse("PGP_FOLDER", ".")}/secring.gpg") - -lazy val pluginSettings = Seq( - sbtPlugin := true, - scalaVersion in ThisBuild := "2.10.6", - resolvers ++= Seq( - Resolver.sonatypeRepo("releases"), - "jgit-repo" at "http://download.eclipse.org/jgit/maven" - ), - libraryDependencies ++= Seq( - "com.lihaoyi" %% "scalatags" % "0.6.0", - "org.scalactic" %% "scalactic" % "3.0.0", - "net.jcazevedo" %% "moultingyaml" % "0.4.0", - "org.scalatest" %% "scalatest" % versions("scalatest") % "test", - "org.scalacheck" %% "scalacheck" % versions("scalacheck") % "test", - "com.sksamuel.scrimage" %% "scrimage-core" % "2.1.7" - ), - scalafmtConfig in ThisBuild := Some(file(".scalafmt")) - ) ++ reformatOnCompileSettings - -lazy val micrositeSettings = Seq( - micrositeName := "sbt-microsites", - micrositeDescription := "An sbt plugin to create awesome microsites for your project", - micrositeBaseUrl := "sbt-microsites", - micrositeDocumentationUrl := "/sbt-microsites/docs/", - micrositeGithubOwner := "47deg", - micrositeGithubRepo := "sbt-microsites", - micrositeHighlightTheme := "color-brewer", - includeFilter in makeSite := "*.html" | "*.css" | "*.png" | "*.jpg" | "*.gif" | "*.js" | "*.swf" | "*.md" -) - -lazy val jsSettings = Seq( - scalaVersion := "2.11.8", - scalaJSStage in Global := FastOptStage, - parallelExecution := false, - scalaJSUseRhino := false, - requiresDOM := false, - skip in packageJSDependencies := false, - jsEnv := NodeJSEnv().value, - libraryDependencies ++= Seq( - "org.scala-js" %%% "scalajs-dom" % "0.9.0", - "be.doeraene" %%% "scalajs-jquery" % "0.9.0", - "com.lihaoyi" %%% "upickle" % "0.4.1", - "org.scala-exercises" %%% "evaluator-client" % "0.1.2-SNAPSHOT", - "com.lihaoyi" %%% "scalatags" % "0.6.0", - "org.querki" %%% "jquery-facade" % "1.0-RC6", - "org.denigma" %%% "codemirror-facade" % "5.11-0.7", - "com.fortysevendeg" %%% "github4s" % "0.9.0", - "fr.hmil" %%% "roshttp" % "2.0.0-RC1" - ), - resolvers ++= Seq(Resolver.url("bintray-sbt-plugin-releases", - url("https://dl.bintray.com/content/sbt/sbt-plugin-releases"))( - Resolver.ivyStylePatterns), - Resolver.sonatypeRepo("snapshots"), - Resolver.bintrayRepo("denigma", "denigma-releases")), - jsDependencies ++= Seq( - "org.webjars" % "jquery" % "2.1.3" / "2.1.3/jquery.js", - ProvidedJS / "codemirror.js", - ProvidedJS / "clike.js" dependsOn "codemirror.js" - ) -) - -lazy val buildInfoSettings = Seq( - buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, sbtVersion), - buildInfoPackage := "microsites" -) - -lazy val commonSettings = artifactSettings ++ miscSettings ++ reformatOnCompileSettings ++ Seq( - scalafmtConfig in ThisBuild := Some(file(".scalafmt")) - ) - -lazy val allSettings = pluginSettings ++ - commonSettings ++ - tutSettings ++ - testScriptedSettings ++ - sharedReleaseProcess ++ - credentialSettings ++ - sharedPublishSettings(gh, dev) +pgpPassphrase := Some(getEnvVar("PGP_PASSPHRASE").getOrElse("").toCharArray) +pgpPublicRing := file(s"$gpgFolder/pubring.gpg") +pgpSecretRing := file(s"$gpgFolder/secring.gpg") lazy val `sbt-microsites` = (project in file(".")) .settings(moduleName := "sbt-microsites") - .settings(allSettings: _*) - .settings(addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.3")) - .settings(addSbtPlugin("org.tpolecat" % "tut-plugin" % "0.4.7")) - .settings(addSbtPlugin("com.typesafe.sbt" % "sbt-site" % "1.0.0")) - .settings(addSbtPlugin("com.typesafe.sbt" % "sbt-ghpages" % "0.5.4")) - .enablePlugins(JekyllPlugin, AutomateHeaderPlugin) + .settings(pluginSettings: _*) + .settings(tutSettings: _*) + .settings(testScriptedSettings: _*) + .enablePlugins(JekyllPlugin) + .enablePlugins(AutomateHeaderPlugin) lazy val docs = (project in file("docs")) - .settings(commonSettings: _*) + .settings(moduleName := "docs") .settings(micrositeSettings: _*) .settings(noPublishSettings: _*) .settings(buildInfoSettings: _*) - .settings(moduleName := "docs") .enablePlugins(MicrositesPlugin) .enablePlugins(BuildInfoPlugin) lazy val kazari = (project in file("kazari")) .settings(moduleName := "kazari") - .settings(commonSettings: _*) .settings(jsSettings: _*) .settings(KazariBuild.kazariTasksSettings: _*) .enablePlugins(ScalaJSPlugin) diff --git a/kazari/src/main/scala/kazari/KazariUIBehavior.scala b/kazari/src/main/scala/kazari/KazariUIBehavior.scala index c3fc8c1d..4dcf1a1f 100644 --- a/kazari/src/main/scala/kazari/KazariUIBehavior.scala +++ b/kazari/src/main/scala/kazari/KazariUIBehavior.scala @@ -33,16 +33,18 @@ object KazariUIBehavior { val kazariModalCurrentSnippetKey = "kazari-modal-current-snippet" def addModalFunctionality(codeMirror: Editor) = { - $("#modal-1").on("change", { (e: JQueryEventObject, a: Any) => - if ($("#modal-1").is(":checked")) { - $("body").addClass("modal-kazari-open") - } else { - $("body").removeClass("modal-kazari-open") + $("#modal-1").on( + "change", { (e: JQueryEventObject, a: Any) => + if ($("#modal-1").is(":checked")) { + $("body").addClass("modal-kazari-open") + } else { + $("body").removeClass("modal-kazari-open") + } } - }) + ) - $(".modal-kazari-fade-screen, .modal-kazari-close").on("click", { - (e: JQueryEventObject, a: Any) => + $(".modal-kazari-fade-screen, .modal-kazari-close").on( + "click", { (e: JQueryEventObject, a: Any) => { $(".modal-kazari-state:checked").prop("checked", false).change() val currentModalSnippet = @@ -51,16 +53,18 @@ object KazariUIBehavior { currentModalSnippet.foreach(s => window.sessionStorage.setItem(s, codeMirror.getDoc().getValue())) } - }) + } + ) $(".modal-kazari-inner").on("click", { (e: JQueryEventObject, a: Any) => e.stopPropagation() }) } - def createModalWindow(evalClient: EvaluatorClient, - githubToken: String, - theme: String): Option[Editor] = { + def createModalWindow( + evalClient: EvaluatorClient, + githubToken: String, + theme: String): Option[Editor] = { val modalDiv = createModalDiv(codeModalClass) document.body.appendChild(modalDiv) @@ -83,9 +87,10 @@ object KazariUIBehavior { addResetButtonBehavior(s".$decoratorButtonResetClass", m) - addGistButtonBehavior(s".$decoratorButtonSaveGistClass", - codeSnippetsFromModal, - githubToken) + addGistButtonBehavior( + s".$decoratorButtonSaveGistClass", + codeSnippetsFromModal, + githubToken) addModalFunctionality(m) @@ -106,77 +111,92 @@ object KazariUIBehavior { window.sessionStorage.setItem(s"$decorationId-$kazariIdOriginalSnippetSuffix", originalSnippet) } - def sendEvaluatorRequest(evaluator: EvaluatorClient, - codeSnippet: String): Future[EvaluationResponse[EvalResponse]] = + def sendEvaluatorRequest( + evaluator: EvaluatorClient, + codeSnippet: String): Future[EvaluationResponse[EvalResponse]] = evaluator.api - .evaluates(dependencies = getDependenciesList(), - resolvers = getResolversList(), - code = codeSnippet) + .evaluates( + dependencies = getDependenciesList(), + resolvers = getResolversList(), + code = codeSnippet) .exec - def addRunButtonBehaviour(btnSelector: String, - parentSelector: String, - evalClient: EvaluatorClient, - codeSnippet: () => String, - onSuccess: (EvaluationResponse[EvalResponse]) => Unit = (_) => (), - onFailure: (Throwable) => Unit = (_) => ()): Unit = - addClickListenerToButton(btnSelector, (e: dom.MouseEvent) => { - def isEvaluationSuccessful(response: EvalResponse): Boolean = - response.msg == EvalResponse.messages.ok - - changeButtonIcon(btnSelector + " " + "i", - decoratorButtonPlayClass, - decoratorButtonSpinnerClass) - $(btnSelector).addClass(compilingKazariClass).removeClass(compilerKazariColorClass) - toggleButtonActiveState(btnSelector, true) - hideAlertMessage(parentSelector) - - sendEvaluatorRequest(evalClient, codeSnippet()).onComplete { - case Success(r) => { - changeButtonIcon(btnSelector + " " + "i", - decoratorButtonSpinnerClass, - decoratorButtonPlayClass) - $(btnSelector).removeClass(compilingKazariClass).addClass(compilerKazariColorClass) - toggleButtonActiveState(btnSelector, false) - r.fold({ e => - showAlertMessage(parentSelector, - s"$errorMessagePrefix ${e.getCause.getMessage}", - false) - }, { - compilationResult => - { - val isSuccess = isEvaluationSuccessful(compilationResult.result) - val resultMsg = compilationResult.result.value.getOrElse("") - val errorMsg = if (compilationResult.result.compilationInfos.nonEmpty) { - compilationResult.result.compilationInfos.mkString(" ") - } else { - resultMsg - } - val compilationValue = if (isSuccess) { resultMsg } else { errorMsg } - showAlertMessage(parentSelector, - s"${compilationResult.result.msg} - $compilationValue", - isSuccess) + def addRunButtonBehaviour( + btnSelector: String, + parentSelector: String, + evalClient: EvaluatorClient, + codeSnippet: () => String, + onSuccess: (EvaluationResponse[EvalResponse]) => Unit = (_) => (), + onFailure: (Throwable) => Unit = (_) => ()): Unit = + addClickListenerToButton( + btnSelector, + (e: dom.MouseEvent) => { + def isEvaluationSuccessful(response: EvalResponse): Boolean = + response.msg == EvalResponse.messages.ok + + changeButtonIcon( + btnSelector + " " + "i", + decoratorButtonPlayClass, + decoratorButtonSpinnerClass) + $(btnSelector).addClass(compilingKazariClass).removeClass(compilerKazariColorClass) + toggleButtonActiveState(btnSelector, true) + hideAlertMessage(parentSelector) + + sendEvaluatorRequest(evalClient, codeSnippet()).onComplete { + case Success(r) => { + changeButtonIcon( + btnSelector + " " + "i", + decoratorButtonSpinnerClass, + decoratorButtonPlayClass) + $(btnSelector).removeClass(compilingKazariClass).addClass(compilerKazariColorClass) + toggleButtonActiveState(btnSelector, false) + r.fold( + { e => + showAlertMessage( + parentSelector, + s"$errorMessagePrefix ${e.getCause.getMessage}", + false) + }, { + compilationResult => + { + val isSuccess = isEvaluationSuccessful(compilationResult.result) + val resultMsg = compilationResult.result.value.getOrElse("") + val errorMsg = if (compilationResult.result.compilationInfos.nonEmpty) { + compilationResult.result.compilationInfos.mkString(" ") + } else { + resultMsg + } + val compilationValue = if (isSuccess) { resultMsg } else { errorMsg } + showAlertMessage( + parentSelector, + s"${compilationResult.result.msg} - $compilationValue", + isSuccess) + } } - }) - onSuccess(r) - } - case Failure(e) => { - changeButtonIcon(btnSelector + " " + "i", - decoratorButtonSpinnerClass, - decoratorButtonPlayClass) - toggleButtonActiveState(btnSelector, false) - showAlertMessage(parentSelector, - "Error while connecting to the remote evaluator.", - false) - onFailure(e) + ) + onSuccess(r) + } + case Failure(e) => { + changeButtonIcon( + btnSelector + " " + "i", + decoratorButtonSpinnerClass, + decoratorButtonPlayClass) + toggleButtonActiveState(btnSelector, false) + showAlertMessage( + parentSelector, + "Error while connecting to the remote evaluator.", + false) + onFailure(e) + } } } - }) + ) - def addEditButtonBehaviour(idPrefix: String, - id: Int, - codeMirror: Option[Editor], - snippet: () => String): Unit = { + def addEditButtonBehaviour( + idPrefix: String, + id: Int, + codeMirror: Option[Editor], + snippet: () => String): Unit = { val decorationId = s"$idPrefix-${id.toString}" createInitialState(decorationId, snippet()) @@ -201,60 +221,73 @@ object KazariUIBehavior { } hideAlertMessage(s".$codeModalClass") $(".modal-kazari-state").prop("checked", true).change() - }) + } + ) } def addResetButtonBehavior(btnSelector: String, codeMirrorEditor: Editor): Unit = { - addClickListenerToButton(btnSelector, (e: dom.MouseEvent) => { - (for { - snippetId <- Option(window.sessionStorage.getItem(kazariModalCurrentSnippetKey)) - snippet <- Option( - window.sessionStorage.getItem(s"$snippetId-$kazariIdOriginalSnippetSuffix")) - } yield (snippet)).foreach { - case s => - codeMirrorEditor.getDoc().clearHistory() - codeMirrorEditor.getDoc().setValue(s) + addClickListenerToButton( + btnSelector, + (e: dom.MouseEvent) => { + (for { + snippetId <- Option(window.sessionStorage.getItem(kazariModalCurrentSnippetKey)) + snippet <- Option( + window.sessionStorage.getItem(s"$snippetId-$kazariIdOriginalSnippetSuffix")) + } yield (snippet)).foreach { + case s => + codeMirrorEditor.getDoc().clearHistory() + codeMirrorEditor.getDoc().setValue(s) + } } - }) + ) } - def addGistButtonBehavior(btnSelector: String, - codeSnippet: () => String, - accessToken: String, - onSuccess: (EvaluationResponse[EvalResponse]) => Unit = (_) => (), - onFailure: (Throwable) => Unit = (_) => ()): Unit = { - addClickListenerToButton(btnSelector, (e: dom.MouseEvent) => { - changeButtonIcon(btnSelector + " " + "i", - decoratorButtonGithubClass, - decoratorButtonSpinnerClass) - toggleButtonActiveState(btnSelector, true) - - val description = window.prompt(newGistPrompt) - val gistApi = Github(Some(accessToken)).gists - val files = Map(newGistFilename -> GistFile(codeSnippet())) - val request = gistApi - .newGist(if (description.isEmpty) newGistDefaultDescription else description, true, files) - - request.execFuture[SimpleHttpResponse]().onComplete { - result => - changeButtonIcon(btnSelector + " " + "i", - decoratorButtonSpinnerClass, - decoratorButtonGithubClass) - toggleButtonActiveState(btnSelector, false) - - result match { - case Failure(e) => println("failure creating gist -> " + e) - case Success(r) => - r.fold( - e => println("failure creating gist -> " + e), - r => { - println("Success creating gist -> " + r) - println("Status code -> " + r.statusCode) - } - ) - } + def addGistButtonBehavior( + btnSelector: String, + codeSnippet: () => String, + accessToken: String, + onSuccess: (EvaluationResponse[EvalResponse]) => Unit = (_) => (), + onFailure: (Throwable) => Unit = (_) => ()): Unit = { + addClickListenerToButton( + btnSelector, + (e: dom.MouseEvent) => { + changeButtonIcon( + btnSelector + " " + "i", + decoratorButtonGithubClass, + decoratorButtonSpinnerClass) + toggleButtonActiveState(btnSelector, true) + + val description = window.prompt(newGistPrompt) + val gistApi = Github(Some(accessToken)).gists + val files = Map(newGistFilename -> GistFile(codeSnippet())) + val request = gistApi + .newGist( + if (description.isEmpty) newGistDefaultDescription else description, + true, + files) + + request.execFuture[SimpleHttpResponse]().onComplete { + result => + changeButtonIcon( + btnSelector + " " + "i", + decoratorButtonSpinnerClass, + decoratorButtonGithubClass) + toggleButtonActiveState(btnSelector, false) + + result match { + case Failure(e) => println("failure creating gist -> " + e) + case Success(r) => + r.fold( + e => println("failure creating gist -> " + e), + r => { + println("Success creating gist -> " + r) + println("Status code -> " + r.statusCode) + } + ) + } + } } - }) + ) } def applyColorThemes(): Unit = { diff --git a/project/ProjectPlugin.scala b/project/ProjectPlugin.scala new file mode 100644 index 00000000..3047baaf --- /dev/null +++ b/project/ProjectPlugin.scala @@ -0,0 +1,108 @@ +import sbt.Keys.{scalaVersion, _} +import sbt._ +import com.typesafe.sbt.site.SitePlugin.autoImport._ +import microsites.MicrositeKeys._ +import sbtorgpolicies._ +import sbtorgpolicies.OrgPoliciesPlugin.autoImport._ +import org.scalajs.sbtplugin.ScalaJSPlugin.autoImport._ +import sbt.ScriptedPlugin.{scriptedDependencies, scriptedLaunchOpts} +import sbtbuildinfo.BuildInfoPlugin.autoImport.{buildInfoKeys, buildInfoPackage, BuildInfoKey} + +object ProjectPlugin extends AutoPlugin { + + override def trigger: PluginTrigger = allRequirements + + override def requires: Plugins = OrgPoliciesPlugin + + object autoImport { + + lazy val pluginSettings = Seq( + sbtPlugin := true, + resolvers ++= Seq("jgit-repo" at "http://download.eclipse.org/jgit/maven"), + addSbtPlugin("com.typesafe.sbt" % "sbt-ghpages" % "0.6.0"), + addSbtPlugin("com.typesafe.sbt" % "sbt-site" % "1.2.0"), + addSbtPlugin("org.tpolecat" % "tut-plugin" % "0.4.8"), + libraryDependencies ++= Seq( + "com.lihaoyi" %% "scalatags" % "0.6.0", + "org.scalactic" %% "scalactic" % "3.0.0", + "net.jcazevedo" %% "moultingyaml" % "0.4.0", + "com.sksamuel.scrimage" %% "scrimage-core" % "2.1.7", + %%("scalatest") % "test", + %%("scalacheck") % "test" + ) + ) + + lazy val testScriptedSettings = + ScriptedPlugin.scriptedSettings ++ Seq( + scriptedDependencies := (compile in Test) map { (analysis) => + Unit + }, + scriptedLaunchOpts := { + scriptedLaunchOpts.value ++ + Seq( + "-Xmx2048M", + "-XX:ReservedCodeCacheSize=256m", + "-XX:+UseConcMarkSweepGC", + "-Dplugin.version=" + version.value, + "-Dscala.version=" + scalaVersion.value + ) + } + ) + + lazy val buildInfoSettings = Seq( + buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, sbtVersion), + buildInfoPackage := "microsites" + ) + + lazy val micrositeSettings = Seq( + micrositeName := "sbt-microsites", + micrositeDescription := "An sbt plugin to create awesome microsites for your project", + micrositeBaseUrl := "sbt-microsites", + micrositeDocumentationUrl := "/sbt-microsites/docs/", + micrositeGithubOwner := "47deg", + micrositeGithubRepo := "sbt-microsites", + micrositeHighlightTheme := "color-brewer", + includeFilter in makeSite := "*.html" | "*.css" | "*.png" | "*.jpg" | "*.gif" | "*.js" | "*.swf" | "*.md" + ) + + lazy val jsSettings = sharedJsSettings ++ Seq( + scalaVersion := "2.11.8", + crossScalaVersions := Seq("2.11.8"), + skip in packageJSDependencies := false, + libraryDependencies ++= Seq( + "org.scala-js" %%% "scalajs-dom" % "0.9.0", + "be.doeraene" %%% "scalajs-jquery" % "0.9.0", + "com.lihaoyi" %%% "upickle" % "0.4.1", + "org.scala-exercises" %%% "evaluator-client" % "0.1.2-SNAPSHOT", + "com.lihaoyi" %%% "scalatags" % "0.6.0", + "org.querki" %%% "jquery-facade" % "1.0-RC6", + "org.denigma" %%% "codemirror-facade" % "5.11-0.7", + "com.fortysevendeg" %%% "github4s" % "0.9.0", + "fr.hmil" %%% "roshttp" % "2.0.0-RC1" + ), + resolvers ++= Seq( + Resolver.url( + "bintray-sbt-plugin-releases", + url("https://dl.bintray.com/content/sbt/sbt-plugin-releases"))( + Resolver.ivyStylePatterns), + Resolver.sonatypeRepo("snapshots"), + Resolver.bintrayRepo("denigma", "denigma-releases") + ), + jsDependencies ++= Seq( + "org.webjars" % "jquery" % "2.1.3" / "2.1.3/jquery.js", + ProvidedJS / "codemirror.js", + ProvidedJS / "clike.js" dependsOn "codemirror.js" + ) + ) + + } + + override def projectSettings = + Seq( + name := "sbt-microsites", + description := "An sbt plugin to create awesome microsites for your project", + scalaVersion := "2.10.6", + crossScalaVersions := Seq("2.10.6"), + scalaOrganization := "org.scala-lang" + ) ++ shellPromptSettings +} diff --git a/project/build.properties b/project/build.properties index 13d3ee7b..e0cbc71d 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version = 0.13.12 \ No newline at end of file +sbt.version = 0.13.13 \ No newline at end of file diff --git a/project/plugins.sbt b/project/plugins.sbt index bb3701b4..48e9b90f 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,6 +1,4 @@ -addSbtPlugin("com.fortysevendeg" % "sbt-catalysts-extras" % "0.1.2") -addSbtPlugin("com.geirsson" % "sbt-scalafmt" % "0.4.10") -addSbtPlugin("org.tpolecat" % "tut-plugin" % "0.4.8") -libraryDependencies <+= sbtVersion("org.scala-sbt" % "scripted-plugin" % _) -// Plugin inception dependency to be able to generate the sbt-microsites' microsite -addSbtPlugin("com.fortysevendeg" % "sbt-microsites" % "0.4.0") +libraryDependencies += "org.scala-sbt" % "scripted-plugin" % sbtVersion.value + +resolvers += Resolver.sonatypeRepo("snapshots") +addSbtPlugin("com.47deg" % "sbt-org-policies" % "0.2.2-SNAPSHOT") diff --git a/src/main/scala/microsites/MicrositesPlugin.scala b/src/main/scala/microsites/MicrositesPlugin.scala index 770c9b31..ef9cb84b 100644 --- a/src/main/scala/microsites/MicrositesPlugin.scala +++ b/src/main/scala/microsites/MicrositesPlugin.scala @@ -16,8 +16,7 @@ package microsites -import com.typesafe.sbt.SbtGhPages.GhPagesKeys._ -import com.typesafe.sbt.SbtGhPages.ghpages +import com.typesafe.sbt.sbtghpages.GhpagesPlugin.autoImport._ import com.typesafe.sbt.SbtGit.git import com.typesafe.sbt.site.SitePlugin.autoImport._ import com.typesafe.sbt.site.jekyll.JekyllPlugin @@ -42,7 +41,6 @@ object MicrositesPlugin extends AutoPlugin { tutSettings ++ micrositeDefaultSettings ++ micrositeTasksSettings ++ - ghpages.settings ++ Seq( git.remoteRepo := s"git@github.com:${micrositeGithubOwner.value}/${micrositeGithubRepo.value}.git", mappings in Jekyll ++= micrositeHelper.value.directory("src/main/resources/microsite"), @@ -70,14 +68,16 @@ object MicrositesPlugin extends AutoPlugin { micrositeExternalIncludesDirectory := (resourceDirectory in Compile).value / "microsite" / "includes", micrositeDataDirectory := (resourceDirectory in Compile).value / "microsite" / "data", micrositeExtraMdFiles := Map.empty, - micrositePalette := Map("brand-primary" -> "#02B4E5", - "brand-secondary" -> "#1C2C52", - "brand-tertiary" -> "#162341", - "gray-dark" -> "#453E46", - "gray" -> "#837F84", - "gray-light" -> "#E3E2E3", - "gray-lighter" -> "#F4F3F4", - "white-color" -> "#FFFFFF"), + micrositePalette := Map( + "brand-primary" -> "#02B4E5", + "brand-secondary" -> "#1C2C52", + "brand-tertiary" -> "#162341", + "gray-dark" -> "#453E46", + "gray" -> "#837F84", + "gray-light" -> "#E3E2E3", + "gray-lighter" -> "#F4F3F4", + "white-color" -> "#FFFFFF" + ), micrositeFavicons := Seq(), micrositeGithubOwner := "47deg", micrositeGithubRepo := "sbt-microsites", @@ -89,7 +89,8 @@ object MicrositesPlugin extends AutoPlugin { micrositeKazariResolvers := Seq(), micrositeGitHostingService := GitHub, micrositeGitHostingUrl := "", - includeFilter in Jekyll := ("*.html" | "*.css" | "*.png" | "*.jpg" | "*.jpeg" | "*.gif" | "*.js" | "*.swf" | "*.md" | "*.webm" | "*.ico" | "CNAME")) + includeFilter in Jekyll := ("*.html" | "*.css" | "*.png" | "*.jpg" | "*.jpeg" | "*.gif" | "*.js" | "*.swf" | "*.md" | "*.webm" | "*.ico" | "CNAME") + ) lazy val micrositeHelper: Def.Initialize[MicrositeHelper] = Def.setting { val baseUrl = @@ -161,14 +162,14 @@ object MicrositesPlugin extends AutoPlugin { }, gitHostingService = micrositeGitHostingService.value.name, gitHostingUrl = micrositeGitHostingUrl.value - ))) + ) + )) } lazy val micrositeTasksSettings = Seq( - microsite := micrositeHelper.value.createResources(resourceManagedDir = - (resourceManaged in Compile).value, - tutSourceDirectory = - (tutSourceDirectory in Compile).value), + microsite := micrositeHelper.value.createResources( + resourceManagedDir = (resourceManaged in Compile).value, + tutSourceDirectory = (tutSourceDirectory in Compile).value), micrositeConfig := micrositeHelper.value .copyConfigurationFile((sourceDirectory in Jekyll).value, siteDirectory.value), makeMicrosite := Def @@ -183,7 +184,7 @@ object MicrositesPlugin extends AutoPlugin { .sequential( clean, makeMicrosite, - pushSite + ghpagesPushSite ) .value ) diff --git a/src/main/scala/microsites/layouts/HomeLayout.scala b/src/main/scala/microsites/layouts/HomeLayout.scala index fad255d1..a1ee3dda 100644 --- a/src/main/scala/microsites/layouts/HomeLayout.scala +++ b/src/main/scala/microsites/layouts/HomeLayout.scala @@ -37,41 +37,64 @@ class HomeLayout(config: MicrositeSettings) extends Layout(config) { } def homeHeader: TypedTag[String] = - header(id := "site-header", - div( - cls := "navbar-wrapper", - div(cls := "container", - div(cls := "row", - div(cls := "col-xs-6", - a(href := "{{ site.baseurl }}/", - cls := "brand", - div(cls := "icon-wrapper", span(config.identity.name)))), - div(cls := "col-xs-6", buildCollapseMenu))) - ), - div(cls := "jumbotron", - div(cls := "container", - h1(cls := "text-center", config.identity.description), - h2(), - p(cls := "text-center", - a(href := config.gitSiteUrl, - cls := "btn btn-outline-inverse", - s"View on ${config.gitSettings.gitHostingService}")))), - "{% include menu.html %}") + header( + id := "site-header", + div( + cls := "navbar-wrapper", + div( + cls := "container", + div( + cls := "row", + div( + cls := "col-xs-6", + a( + href := "{{ site.baseurl }}/", + cls := "brand", + div(cls := "icon-wrapper", span(config.identity.name)))), + div(cls := "col-xs-6", buildCollapseMenu) + ) + ) + ), + div( + cls := "jumbotron", + div( + cls := "container", + h1(cls := "text-center", config.identity.description), + h2(), + p( + cls := "text-center", + a( + href := config.gitSiteUrl, + cls := "btn btn-outline-inverse", + s"View on ${config.gitSettings.gitHostingService}")) + ) + ), + "{% include menu.html %}" + ) def homeMain: TypedTag[String] = - main(id := "site-main", - section(cls := "use", div(cls := "container", div(id := "content", "{{ content }}"))), - section(cls := "technologies", - div(cls := "container", - div(cls := "row", - """{% for tech_hash in page.technologies %} + main( + id := "site-main", + section(cls := "use", div(cls := "container", div(id := "content", "{{ content }}"))), + section( + cls := "technologies", + div( + cls := "container", + div( + cls := "row", + """{% for tech_hash in page.technologies %} {% for tech in tech_hash %}""", - div(cls := "col-md-4", - div(cls := "{{ tech[0] }}-icon-wrapper"), - h3("{{ tech[1][0] }}"), - p("{{ tech[1][1] }}")), - """{% endfor %} - {% endfor %}""")))) + div( + cls := "col-md-4", + div(cls := "{{ tech[0] }}-icon-wrapper"), + h3("{{ tech[1][0] }}"), + p("{{ tech[1][1] }}")), + """{% endfor %} + {% endfor %}""" + ) + ) + ) + ) def scriptsKazari: List[TypedTag[String]] = scripts ++ List(script(src := "{{ site.baseurl }}/js/kazari.js"), script(kazariEnableScript)) diff --git a/src/main/scala/microsites/layouts/Layout.scala b/src/main/scala/microsites/layouts/Layout.scala index 3f82cb7a..8b08c47c 100644 --- a/src/main/scala/microsites/layouts/Layout.scala +++ b/src/main/scala/microsites/layouts/Layout.scala @@ -62,13 +62,17 @@ abstract class Layout(config: MicrositeSettings) { config.micrositeKazariSettings.micrositeKazariDependencies .map(dependency => s"${dependency.groupId};${dependency.artifactId}_${dependency.scalaVersion};${dependency.version}") - .mkString(",")), - meta(name := "kazari-resolvers", - content := - config.micrositeKazariSettings.micrositeKazariResolvers.mkString(",")), - link(rel := "icon", - `type` := "image/png", - href := "{{site.url}}{{site.baseurl}}/img/favicon.png")) + .mkString(",") + ), + meta( + name := "kazari-resolvers", + content := + config.micrositeKazariSettings.micrositeKazariResolvers.mkString(",")), + link( + rel := "icon", + `type` := "image/png", + href := "{{site.url}}{{site.baseurl}}/img/favicon.png") + ) def favicons: List[TypedTag[String]] = (if (config.visualSettings.favicons.nonEmpty) { @@ -77,16 +81,18 @@ abstract class Layout(config: MicrositeSettings) { micrositeHelper.faviconDescriptions }).map { case icon => - link(rel := "icon", - `type` := "image/png", - attr("sizes") := s"${icon.sizeDescription}", - href := s"{{site.url}}{{site.baseurl}}/img/${icon.filename}") + link( + rel := "icon", + `type` := "image/png", + attr("sizes") := s"${icon.sizeDescription}", + href := s"{{site.url}}{{site.baseurl}}/img/${icon.filename}") }.toList def styles: List[TypedTag[String]] = { - val customCssList = fetchFilesRecursively(config.fileLocations.micrositeCssDirectory, - List("css")) map { css => + val customCssList = fetchFilesRecursively( + config.fileLocations.micrositeCssDirectory, + List("css")) map { css => link(rel := "stylesheet", href := s"{{site.baseurl}}/css/${css.getName}") } @@ -95,10 +101,12 @@ abstract class Layout(config: MicrositeSettings) { } List( - link(rel := "stylesheet", - href := "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"), - link(rel := "stylesheet", - href := "https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"), + link( + rel := "stylesheet", + href := "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"), + link( + rel := "stylesheet", + href := "https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"), link( rel := "stylesheet", href := s"{{site.url}}{{site.baseurl}}/highlight/styles/${config.visualSettings.highlightTheme}.css"), @@ -143,33 +151,53 @@ abstract class Layout(config: MicrositeSettings) { """.stripMargin) def globalFooter = - footer(id := "site-footer", - div(cls := "container", - div(cls := "row", - div(cls := "col-xs-6", - p("{{ site.name }} is designed and developed by ", - a(href := s"${config.identity.homepage}", - target := "_blank", - s"${config.identity.author}"))), - div(cls := "col-xs-6", - p(cls := "text-right", - a(href := config.gitSiteUrl, - span(cls := s"fa ${config.gitHostingIconClass}"), - s"View on ${config.gitSettings.gitHostingService}")))))) + footer( + id := "site-footer", + div( + cls := "container", + div( + cls := "row", + div( + cls := "col-xs-6", + p( + "{{ site.name }} is designed and developed by ", + a( + href := s"${config.identity.homepage}", + target := "_blank", + s"${config.identity.author}")) + ), + div( + cls := "col-xs-6", + p( + cls := "text-right", + a( + href := config.gitSiteUrl, + span(cls := s"fa ${config.gitHostingIconClass}"), + s"View on ${config.gitSettings.gitHostingService}")) + ) + ) + ) + ) def buildCollapseMenu: TypedTag[String] = - nav(cls := "text-right", - ul(cls := "", - li( - a(href := config.gitSiteUrl, - i(cls := s"fa ${config.gitHostingIconClass}"), - span(cls := "hidden-xs", config.gitSettings.gitHostingService.name)) - ), - if (!config.urlSettings.micrositeDocumentationUrl.isEmpty) - li( - a(href := s"${config.urlSettings.micrositeDocumentationUrl}", - i(cls := "fa fa-file-text"), - span(cls := "hidden-xs", "Documentation")) - ) - else ())) + nav( + cls := "text-right", + ul( + cls := "", + li( + a( + href := config.gitSiteUrl, + i(cls := s"fa ${config.gitHostingIconClass}"), + span(cls := "hidden-xs", config.gitSettings.gitHostingService.name)) + ), + if (!config.urlSettings.micrositeDocumentationUrl.isEmpty) + li( + a( + href := s"${config.urlSettings.micrositeDocumentationUrl}", + i(cls := "fa fa-file-text"), + span(cls := "hidden-xs", "Documentation")) + ) + else () + ) + ) } diff --git a/src/main/scala/microsites/layouts/MenuPartialLayout.scala b/src/main/scala/microsites/layouts/MenuPartialLayout.scala index 3ec0adbd..d43a8bdc 100644 --- a/src/main/scala/microsites/layouts/MenuPartialLayout.scala +++ b/src/main/scala/microsites/layouts/MenuPartialLayout.scala @@ -24,14 +24,19 @@ import scalatags.Text.all._ class MenuPartialLayout(config: MicrositeSettings) extends Layout(config) { override def render: TypedTag[String] = - div("{% assign pages = site.pages | sort:'position' %}", - ul(cls := "horizontalNav", - "{% for p in pages %} {% if p.position != null %}", - li( - a(cls := "{% if p.url == page.url %} active {% endif %}", - href := "{{ site.baseurl }}{{ p.url }}", - "{{ p.title }}") - ), - "{% endif %} {% endfor %}")) + div( + "{% assign pages = site.pages | sort:'position' %}", + ul( + cls := "horizontalNav", + "{% for p in pages %} {% if p.position != null %}", + li( + a( + cls := "{% if p.url == page.url %} active {% endif %}", + href := "{{ site.baseurl }}{{ p.url }}", + "{{ p.title }}") + ), + "{% endif %} {% endfor %}" + ) + ) } diff --git a/src/main/scala/microsites/layouts/PageLayout.scala b/src/main/scala/microsites/layouts/PageLayout.scala index cc9b1454..eede7b31 100644 --- a/src/main/scala/microsites/layouts/PageLayout.scala +++ b/src/main/scala/microsites/layouts/PageLayout.scala @@ -37,29 +37,42 @@ class PageLayout(config: MicrositeSettings) extends Layout(config) { } def pageHeader: TypedTag[String] = - header(id := "site-header", - div(cls := "navbar-wrapper navbar-inverse", - div(cls := "container", - div(cls := "navbar-header", - button(tpe := "button", - cls := "navbar-toggle collapsed", - data.toggle := "collapse", - data.target := "#bs-example-navbar-collapse-1", - aria.expanded := "false", - span(cls := "sr-only", "Toggle navigation"), - span(cls := "icon-bar"), - span(cls := "icon-bar"), - span(cls := "icon-bar")), - a(href := "{{ site.baseurl }}/", - cls := "brand", - div(cls := "icon-wrapper", span(config.identity.name)))), - buildCollapseMenu)), - div(cls := "jumbotron", - style := "background-image:url('{{site.baseurl}}/img/jumbotron_pattern.png')"), - "{% include menu.html %}") + header( + id := "site-header", + div( + cls := "navbar-wrapper navbar-inverse", + div( + cls := "container", + div( + cls := "navbar-header", + button( + tpe := "button", + cls := "navbar-toggle collapsed", + data.toggle := "collapse", + data.target := "#bs-example-navbar-collapse-1", + aria.expanded := "false", + span(cls := "sr-only", "Toggle navigation"), + span(cls := "icon-bar"), + span(cls := "icon-bar"), + span(cls := "icon-bar") + ), + a( + href := "{{ site.baseurl }}/", + cls := "brand", + div(cls := "icon-wrapper", span(config.identity.name))) + ), + buildCollapseMenu + ) + ), + div( + cls := "jumbotron", + style := "background-image:url('{{site.baseurl}}/img/jumbotron_pattern.png')"), + "{% include menu.html %}" + ) def pageMain: TypedTag[String] = - main(id := "site-main", - section(cls := "use", div(cls := "container", div(id := "content", "{{ content }}")))) + main( + id := "site-main", + section(cls := "use", div(cls := "container", div(id := "content", "{{ content }}")))) } diff --git a/src/main/scala/microsites/microsites.scala b/src/main/scala/microsites/microsites.scala index b7fd42c2..71d174c6 100644 --- a/src/main/scala/microsites/microsites.scala +++ b/src/main/scala/microsites/microsites.scala @@ -21,53 +21,60 @@ import scala.language.{postfixOps, reflectiveCalls} package object microsites { - case class KazariDependency(groupId: String, - artifactId: String, - scalaVersion: String, - version: String) - - case class KazariSettings(micrositeKazariEvaluatorUrl: String, - micrositeKazariEvaluatorToken: String, - micrositeKazariGithubToken: String, - micrositeKazariCodeMirrorTheme: String, - micrositeKazariDependencies: Seq[KazariDependency], - micrositeKazariResolvers: Seq[String]) - - case class MicrositeIdentitySettings(name: String, - description: String, - author: String, - homepage: String, - twitter: String) - - case class MicrositeFileLocations(micrositeImgDirectory: File, - micrositeCssDirectory: File, - micrositeJsDirectory: File, - micrositeCDNDirectives: CdnDirectives, - micrositeExternalLayoutsDirectory: File, - micrositeExternalIncludesDirectory: File, - micrositeDataDirectory: File, - micrositeExtraMdFiles: Map[File, ExtraMdFileConfig]) - - case class MicrositeGitSettings(githubOwner: String, - githubRepo: String, - gitHostingService: MicrositeKeys.GitHostingService, - gitHostingUrl: String) + case class KazariDependency( + groupId: String, + artifactId: String, + scalaVersion: String, + version: String) + + case class KazariSettings( + micrositeKazariEvaluatorUrl: String, + micrositeKazariEvaluatorToken: String, + micrositeKazariGithubToken: String, + micrositeKazariCodeMirrorTheme: String, + micrositeKazariDependencies: Seq[KazariDependency], + micrositeKazariResolvers: Seq[String]) + + case class MicrositeIdentitySettings( + name: String, + description: String, + author: String, + homepage: String, + twitter: String) + + case class MicrositeFileLocations( + micrositeImgDirectory: File, + micrositeCssDirectory: File, + micrositeJsDirectory: File, + micrositeCDNDirectives: CdnDirectives, + micrositeExternalLayoutsDirectory: File, + micrositeExternalIncludesDirectory: File, + micrositeDataDirectory: File, + micrositeExtraMdFiles: Map[File, ExtraMdFileConfig]) + + case class MicrositeGitSettings( + githubOwner: String, + githubRepo: String, + gitHostingService: MicrositeKeys.GitHostingService, + gitHostingUrl: String) case class MicrositeUrlSettings(micrositeBaseUrl: String, micrositeDocumentationUrl: String) case class MicrositeFavicon(filename: String, sizeDescription: String) - case class MicrositeVisualSettings(highlightTheme: String, - palette: Map[String, String], - favicons: Seq[MicrositeFavicon]) + case class MicrositeVisualSettings( + highlightTheme: String, + palette: Map[String, String], + favicons: Seq[MicrositeFavicon]) - case class MicrositeSettings(identity: MicrositeIdentitySettings, - visualSettings: MicrositeVisualSettings, - configYaml: ConfigYml, - fileLocations: MicrositeFileLocations, - urlSettings: MicrositeUrlSettings, - gitSettings: MicrositeGitSettings, - micrositeKazariSettings: KazariSettings) { + case class MicrositeSettings( + identity: MicrositeIdentitySettings, + visualSettings: MicrositeVisualSettings, + configYaml: ConfigYml, + fileLocations: MicrositeFileLocations, + urlSettings: MicrositeUrlSettings, + gitSettings: MicrositeGitSettings, + micrositeKazariSettings: KazariSettings) { def gitSiteUrl: String = { gitSettings.gitHostingService match { @@ -87,9 +94,10 @@ package object microsites { } } - case class ExtraMdFileConfig(fileName: String, - layout: String, - metaProperties: Map[String, String] = Map.empty) + case class ExtraMdFileConfig( + fileName: String, + layout: String, + metaProperties: Map[String, String] = Map.empty) case class CdnDirectives(jsList: List[String] = Nil, cssList: List[String] = Nil) diff --git a/src/main/scala/microsites/util/FileHelper.scala b/src/main/scala/microsites/util/FileHelper.scala index bca9baf6..82607da1 100644 --- a/src/main/scala/microsites/util/FileHelper.scala +++ b/src/main/scala/microsites/util/FileHelper.scala @@ -59,9 +59,10 @@ trait FileHelper { Stream.continually(zipIn.getNextEntry).takeWhile(_ != null).foreach { entry => val newFile = new File(output + File.separator + entry.getName) - (entry.isDirectory, - !newFile.exists() && - newFile.getAbsolutePath.startsWith(s"$output$filter")) match { + ( + entry.isDirectory, + !newFile.exists() && + newFile.getAbsolutePath.startsWith(s"$output$filter")) match { case (true, true) => newFile.mkdir() case (true, _) => case (false, true) => @@ -79,8 +80,9 @@ trait FileHelper { } } - def fetchFilesRecursively(directory: File, - includeFilesExtension: List[String] = Nil): List[File] = { + def fetchFilesRecursively( + directory: File, + includeFilesExtension: List[String] = Nil): List[File] = { val listFiles = Option(directory.listFiles) diff --git a/src/main/scala/microsites/util/MicrositeHelper.scala b/src/main/scala/microsites/util/MicrositeHelper.scala index 5bb7bb74..ffbe50ba 100644 --- a/src/main/scala/microsites/util/MicrositeHelper.scala +++ b/src/main/scala/microsites/util/MicrositeHelper.scala @@ -62,18 +62,24 @@ class MicrositeHelper(config: MicrositeSettings) { copyPluginResources(pluginURL, s"$targetDir$jekyllDir/", "js") copyPluginResources(pluginURL, s"$targetDir$jekyllDir/", "highlight") - copyFilesRecursively(config.fileLocations.micrositeImgDirectory.getAbsolutePath, - s"$targetDir$jekyllDir/img/") - copyFilesRecursively(config.fileLocations.micrositeCssDirectory.getAbsolutePath, - s"$targetDir$jekyllDir/css/") - copyFilesRecursively(config.fileLocations.micrositeJsDirectory.getAbsolutePath, - s"$targetDir$jekyllDir/js/") - copyFilesRecursively(config.fileLocations.micrositeExternalLayoutsDirectory.getAbsolutePath, - s"$targetDir$jekyllDir/_layouts/") - copyFilesRecursively(config.fileLocations.micrositeExternalIncludesDirectory.getAbsolutePath, - s"$targetDir$jekyllDir/_includes/") - copyFilesRecursively(config.fileLocations.micrositeDataDirectory.getAbsolutePath, - s"$targetDir$jekyllDir/_data/") + copyFilesRecursively( + config.fileLocations.micrositeImgDirectory.getAbsolutePath, + s"$targetDir$jekyllDir/img/") + copyFilesRecursively( + config.fileLocations.micrositeCssDirectory.getAbsolutePath, + s"$targetDir$jekyllDir/css/") + copyFilesRecursively( + config.fileLocations.micrositeJsDirectory.getAbsolutePath, + s"$targetDir$jekyllDir/js/") + copyFilesRecursively( + config.fileLocations.micrositeExternalLayoutsDirectory.getAbsolutePath, + s"$targetDir$jekyllDir/_layouts/") + copyFilesRecursively( + config.fileLocations.micrositeExternalIncludesDirectory.getAbsolutePath, + s"$targetDir$jekyllDir/_includes/") + copyFilesRecursively( + config.fileLocations.micrositeDataDirectory.getAbsolutePath, + s"$targetDir$jekyllDir/_data/") config.fileLocations.micrositeExtraMdFiles foreach { case (sourceFile, targetFileConfig) => @@ -118,9 +124,11 @@ class MicrositeHelper(config: MicrositeSettings) { def createPalette(targetDir: String): File = { val targetFile = createFilePathIfNotExists( s"$targetDir$jekyllDir/_sass/_variables_palette.scss") - val content = config.visualSettings.palette.map { - case (key, value) => s"""$$$key: $value;""" - }.mkString("\n") + val content = config.visualSettings.palette + .map { + case (key, value) => s"""$$$key: $value;""" + } + .mkString("\n") IO.write(targetFile, content) targetFile } @@ -150,13 +158,16 @@ class MicrositeHelper(config: MicrositeSettings) { def createFavicons(targetDir: String): List[File] = { val sourceFile = createFilePathIfNotExists(s"$targetDir$jekyllDir/img/navbar_brand2x.png") - (faviconFilenames zip faviconSizes).map { - case (name, size) => - (new File(s"$targetDir$jekyllDir/img/$name"), size) - }.map { - case (file, (width, height)) => - Image.fromFile(sourceFile).scaleTo(width, height).output(file) - }.toList + (faviconFilenames zip faviconSizes) + .map { + case (name, size) => + (new File(s"$targetDir$jekyllDir/img/$name"), size) + } + .map { + case (file, (width, height)) => + Image.fromFile(sourceFile).scaleTo(width, height).output(file) + } + .toList } def copyConfigurationFile(sourceDir: File, targetDir: File): Unit = { diff --git a/src/test/scala/microsites/util/Arbitraries.scala b/src/test/scala/microsites/util/Arbitraries.scala index 9dd75ec2..2bca3882 100644 --- a/src/test/scala/microsites/util/Arbitraries.scala +++ b/src/test/scala/microsites/util/Arbitraries.scala @@ -71,11 +71,16 @@ trait Arbitraries { implicit def dependencyArbitrary: Arbitrary[KazariDependency] = Arbitrary { for { - dependencyGroup ← Arbitrary.arbitrary[String] - dependencyArtifact ← Arbitrary.arbitrary[String] - dependencyScalaVersion ← Arbitrary.arbitrary[String] - dependencyVersion ← Arbitrary.arbitrary[String] - } yield KazariDependency(dependencyGroup, dependencyArtifact, dependencyScalaVersion, dependencyVersion) + dependencyGroup ← Arbitrary.arbitrary[String] + dependencyArtifact ← Arbitrary.arbitrary[String] + dependencyScalaVersion ← Arbitrary.arbitrary[String] + dependencyVersion ← Arbitrary.arbitrary[String] + } yield + KazariDependency( + dependencyGroup, + dependencyArtifact, + dependencyScalaVersion, + dependencyVersion) } implicit def dependenciesListArbitrary: Arbitrary[Seq[KazariDependency]] = Arbitrary { @@ -134,14 +139,16 @@ trait Arbitraries { MicrositeIdentitySettings(name, description, author, homepage, twitter), MicrositeVisualSettings(highlightTheme, palette, favicon), micrositeConfigYaml, - MicrositeFileLocations(micrositeImgDirectory, - micrositeCssDirectory, - micrositeJsDirectory, - micrositeCDNDirectives, - micrositeExternalLayoutsDirectory, - micrositeExternalIncludesDirectory, - micrositeDataDirectory, - micrositeExtraMdFiles), + MicrositeFileLocations( + micrositeImgDirectory, + micrositeCssDirectory, + micrositeJsDirectory, + micrositeCDNDirectives, + micrositeExternalLayoutsDirectory, + micrositeExternalIncludesDirectory, + micrositeDataDirectory, + micrositeExtraMdFiles + ), MicrositeUrlSettings(micrositeBaseUrl, micrositeDocumentationUrl), MicrositeGitSettings(githubOwner, githubRepo, gitHostingService, gitHostingUrl), KazariSettings( @@ -151,6 +158,7 @@ trait Arbitraries { micrositeKazariCodeMirrorTheme, micrositeKazariDependencies, micrositeKazariResolvers - )) + ) + ) } }