├── .github
└── workflows
│ ├── ci.yml
│ └── clean.yml
├── .gitignore
├── .scalafmt.conf
├── CHANGELOG.md
├── LICENSE.md
├── README.md
├── build.sbt
├── modules
└── frontroute
│ ├── src
│ ├── main
│ │ └── scala
│ │ │ └── frontroute
│ │ │ ├── BrowserLocationProvider.scala
│ │ │ ├── BrowserNavigation.scala
│ │ │ ├── ConjunctionMagnet.scala
│ │ │ ├── CustomLocationProvider.scala
│ │ │ ├── Directive.scala
│ │ │ ├── DirectiveExecute.scala
│ │ │ ├── Directives.scala
│ │ │ ├── DocumentMeta.scala
│ │ │ ├── LinkHandler.scala
│ │ │ ├── Location.scala
│ │ │ ├── LocationProvider.scala
│ │ │ ├── LocationUtils.scala
│ │ │ ├── NavElement.scala
│ │ │ ├── PageStatusCode.scala
│ │ │ ├── PathMatcher.scala
│ │ │ ├── Route.scala
│ │ │ ├── RouteResult.scala
│ │ │ ├── ScrollPosition.scala
│ │ │ ├── domext
│ │ │ └── WindowWithScrollXY.scala
│ │ │ ├── internal
│ │ │ ├── HistoryState.scala
│ │ │ ├── LocationState.scala
│ │ │ ├── PathMatchResult.scala
│ │ │ ├── RoutingPath.scala
│ │ │ ├── RoutingPathStep.scala
│ │ │ ├── RoutingState.scala
│ │ │ └── UrlString.scala
│ │ │ ├── ops
│ │ │ └── DirectiveOfOptionOps.scala
│ │ │ └── package.scala
│ └── test
│ │ └── scala
│ │ ├── com
│ │ └── raquo
│ │ │ └── laminar
│ │ │ └── utils
│ │ │ └── LaminarSpec.scala
│ │ └── frontroute
│ │ ├── ConjunctionTests.scala
│ │ ├── Disjunction2xAndCollectTests.scala
│ │ ├── Disjunction2xAndMapTest.scala
│ │ ├── Disjunction2xAndMapToTest.scala
│ │ ├── Disjunction3xSignalTest.scala
│ │ ├── DisjunctionAndCollectTest.scala
│ │ ├── DisjunctionAndMapTest.scala
│ │ ├── DisjunctionAndMapToTest.scala
│ │ ├── DisjunctionSignalTest.scala
│ │ ├── ExtractHostNameTest.scala
│ │ ├── ExtractHostTest.scala
│ │ ├── ExtractOriginTest.scala
│ │ ├── ExtractPortTest.scala
│ │ ├── ExtractProtocolTest.scala
│ │ ├── FirstMatchTests.scala
│ │ ├── HistoryStateTest.scala
│ │ ├── ParamSignalTest.scala
│ │ ├── PathMatcherTests.scala
│ │ ├── SignalX1Test.scala
│ │ ├── SignalX3Test.scala
│ │ ├── TwoMaybeParamsSignalTest.scala
│ │ ├── pathDirectives
│ │ ├── PathWithOneOfAndRecoverTest.scala
│ │ ├── PathWithOneOfTest.scala
│ │ ├── RevisitPreviousMatchTest.scala
│ │ ├── SimplePathEndTest.scala
│ │ ├── TestPathPrefixTest.scala
│ │ └── TestPathTest.scala
│ │ └── testing
│ │ ├── TestBase.scala
│ │ ├── TestLocationProvider.scala
│ │ └── package.scala
│ └── yarn.lock
├── package-lock.json
├── package.json
├── project
├── Dependencies.scala
├── DependencyVersions.scala
├── JSEnv.scala
├── ScalaOptions.scala
├── ScalaVersions.scala
├── build.properties
└── plugins.sbt
└── website
├── .frontroute-version
├── .gitignore
├── index.html
├── package.json
├── postcss.config.js
├── scala-version.js
├── src
└── main
│ ├── public
│ ├── android-chrome-192x192.png
│ ├── android-chrome-512x512.png
│ ├── apple-touch-icon.png
│ ├── browserconfig.xml
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── favicon.ico
│ ├── images
│ │ └── logo.svg
│ ├── mstile-144x144.png
│ ├── mstile-150x150.png
│ ├── mstile-310x150.png
│ ├── mstile-310x310.png
│ ├── mstile-70x70.png
│ ├── robots.txt
│ ├── safari-pinned-tab.svg
│ ├── site.webmanifest
│ └── stylesheets
│ │ └── highlightjs
│ │ ├── a11y-dark.css
│ │ ├── a11y-light.css
│ │ ├── agate.css
│ │ ├── an-old-hope.css
│ │ ├── androidstudio.css
│ │ ├── arduino-light.css
│ │ ├── arta.css
│ │ ├── ascetic.css
│ │ ├── atelier-cave-dark.css
│ │ ├── atelier-cave-light.css
│ │ ├── atelier-dune-dark.css
│ │ ├── atelier-dune-light.css
│ │ ├── atelier-estuary-dark.css
│ │ ├── atelier-estuary-light.css
│ │ ├── atelier-forest-dark.css
│ │ ├── atelier-forest-light.css
│ │ ├── atelier-heath-dark.css
│ │ ├── atelier-heath-light.css
│ │ ├── atelier-lakeside-dark.css
│ │ ├── atelier-lakeside-light.css
│ │ ├── atelier-plateau-dark.css
│ │ ├── atelier-plateau-light.css
│ │ ├── atelier-savanna-dark.css
│ │ ├── atelier-savanna-light.css
│ │ ├── atelier-seaside-dark.css
│ │ ├── atelier-seaside-light.css
│ │ ├── atelier-sulphurpool-dark.css
│ │ ├── atelier-sulphurpool-light.css
│ │ ├── atom-one-dark-reasonable.css
│ │ ├── atom-one-dark.css
│ │ ├── atom-one-light.css
│ │ ├── brown-paper.css
│ │ ├── brown-papersq.png
│ │ ├── codepen-embed.css
│ │ ├── color-brewer.css
│ │ ├── darcula.css
│ │ ├── dark.css
│ │ ├── default.css
│ │ ├── docco.css
│ │ ├── dracula.css
│ │ ├── far.css
│ │ ├── foundation.css
│ │ ├── github-gist.css
│ │ ├── github.css
│ │ ├── gml.css
│ │ ├── googlecode.css
│ │ ├── gradient-dark.css
│ │ ├── gradient-light.css
│ │ ├── grayscale.css
│ │ ├── gruvbox-dark.css
│ │ ├── gruvbox-light.css
│ │ ├── hopscotch.css
│ │ ├── hybrid.css
│ │ ├── idea.css
│ │ ├── ir-black.css
│ │ ├── isbl-editor-dark.css
│ │ ├── isbl-editor-light.css
│ │ ├── kimbie.dark.css
│ │ ├── kimbie.light.css
│ │ ├── lightfair.css
│ │ ├── lioshi.css
│ │ ├── magula.css
│ │ ├── mono-blue.css
│ │ ├── monokai-sublime.css
│ │ ├── monokai.css
│ │ ├── night-owl.css
│ │ ├── nnfx-dark.css
│ │ ├── nnfx.css
│ │ ├── nord.css
│ │ ├── obsidian.css
│ │ ├── ocean.css
│ │ ├── paraiso-dark.css
│ │ ├── paraiso-light.css
│ │ ├── pojoaque.css
│ │ ├── pojoaque.jpg
│ │ ├── purebasic.css
│ │ ├── qtcreator_dark.css
│ │ ├── qtcreator_light.css
│ │ ├── railscasts.css
│ │ ├── rainbow.css
│ │ ├── routeros.css
│ │ ├── school-book.css
│ │ ├── school-book.png
│ │ ├── shades-of-purple.css
│ │ ├── solarized-dark.css
│ │ ├── solarized-light.css
│ │ ├── srcery.css
│ │ ├── stackoverflow-dark.css
│ │ ├── stackoverflow-light.css
│ │ ├── sunburst.css
│ │ ├── tomorrow-night-blue.css
│ │ ├── tomorrow-night-bright.css
│ │ ├── tomorrow-night-eighties.css
│ │ ├── tomorrow-night.css
│ │ ├── tomorrow.css
│ │ ├── vs.css
│ │ ├── vs2015.css
│ │ ├── xcode.css
│ │ ├── xt256.css
│ │ └── zenburn.css
│ ├── resources
│ └── doc
│ │ ├── examples
│ │ └── index.md
│ │ ├── getting-started
│ │ ├── building-routes.md
│ │ ├── drafts.md
│ │ ├── first-routes.md
│ │ ├── handling-not-found.md
│ │ ├── index.md
│ │ ├── laminar-basics.md
│ │ ├── links-and-navigation.md
│ │ └── nested-routes.md
│ │ ├── index.md
│ │ └── reference
│ │ ├── built-in-directives.md
│ │ ├── built-in-path-matchers.md
│ │ ├── conjunction.md
│ │ ├── custom-directives.md
│ │ ├── directive-combinators.md
│ │ ├── disjunction.md
│ │ ├── first-match.md
│ │ ├── index.md
│ │ ├── navigation.md
│ │ ├── path-matcher-combinators.md
│ │ ├── signal-directive.md
│ │ └── under-the-hood
│ │ ├── directive.md
│ │ ├── path-matching.md
│ │ └── route.md
│ ├── scala
│ └── frontroute
│ │ └── site
│ │ ├── Main.scala
│ │ ├── Page.scala
│ │ ├── Routes.scala
│ │ ├── Site.scala
│ │ ├── SiteModule.scala
│ │ ├── SsrContext.scala
│ │ ├── Styles.scala
│ │ ├── Wiring.scala
│ │ ├── components
│ │ ├── CodeExampleDisplay.scala
│ │ └── DocumentationDisplay.scala
│ │ ├── examples
│ │ ├── CodeExample.scala
│ │ ├── ex_advanced_params
│ │ │ ├── AdvancedParamsExample.scala
│ │ │ └── description.md
│ │ ├── ex_auth
│ │ │ ├── AuthExample.scala
│ │ │ └── description.md
│ │ ├── ex_basic
│ │ │ ├── BasicRoutingExample.scala
│ │ │ └── description.md
│ │ ├── ex_custom_directives
│ │ │ ├── CustomDirectivesExample.scala
│ │ │ └── description.md
│ │ ├── ex_effect
│ │ │ ├── EffectExample.scala
│ │ │ └── description.md
│ │ ├── ex_execute
│ │ │ ├── ExecuteExample.scala
│ │ │ └── description.md
│ │ ├── ex_extract_matched_path
│ │ │ ├── ExtractMatchedPathExample.scala
│ │ │ └── description.md
│ │ ├── ex_matched_path
│ │ │ ├── MatchedPathExample.scala
│ │ │ └── description.md
│ │ ├── ex_multiparams
│ │ │ ├── MultiParamsExample.scala
│ │ │ └── description.md
│ │ ├── ex_navigate
│ │ │ ├── NavigateExample.scala
│ │ │ └── description.md
│ │ ├── ex_navmod
│ │ │ ├── NavModExample.scala
│ │ │ └── description.md
│ │ ├── ex_nested
│ │ │ ├── NestedExample.scala
│ │ │ └── description.md
│ │ ├── ex_params
│ │ │ ├── ParamsExample.scala
│ │ │ └── description.md
│ │ ├── ex_path_matching
│ │ │ ├── PathMatchingExample.scala
│ │ │ └── description.md
│ │ ├── ex_recursive_path_matching
│ │ │ ├── RecursivePathMatchingExample.scala
│ │ │ └── description.md
│ │ ├── ex_tabs
│ │ │ ├── TabsExample.scala
│ │ │ └── description.md
│ │ └── package.scala
│ │ ├── icons
│ │ └── Icons.scala
│ │ ├── layout
│ │ ├── PageFooter.scala
│ │ ├── PageHeader.scala
│ │ ├── PageNavigation.scala
│ │ └── PageWrap.scala
│ │ └── pages
│ │ ├── CodeExamplePage.scala
│ │ ├── DocumentationPage.scala
│ │ ├── NotFoundPage.scala
│ │ └── package.scala
│ └── static
│ ├── fonts
│ ├── Inter-VariableFont_slnt,wght.ttf
│ ├── JetBrainsMono-VariableFont_wght.ttf
│ └── Oxanium-VariableFont_wght.ttf
│ └── stylesheets
│ ├── buttons.css
│ ├── fonts.css
│ ├── index.css
│ ├── markdown.css
│ └── tailwind.css
├── stylelint.config.js
├── tailwind.config.js
├── vite.config.js
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | target
2 | .idea
3 | .vscode
4 | .metals
5 | .bsp
6 | node_modules
7 |
--------------------------------------------------------------------------------
/.scalafmt.conf:
--------------------------------------------------------------------------------
1 | version = 3.8.4-RC3
2 | runner.dialect = "scala213source3"
3 | fileOverride {
4 | "glob:**/scala-3/**" {
5 | runner.dialect = scala3
6 | }
7 | }
8 | style = defaultWithAlign
9 | align.openParenCallSite = true
10 | align.openParenDefnSite = true
11 | align.arrowEnumeratorGenerator = true
12 | maxColumn = 180
13 | continuationIndent.defnSite = 2
14 | assumeStandardLibraryStripMargin = true
15 | danglingParentheses.defnSite = true
16 | danglingParentheses.callSite = true
17 | rewrite.rules = [AvoidInfix, ExpandImportSelectors, RedundantParens, SortModifiers]
18 | docstrings = JavaDoc
19 | newlines.afterCurlyLambda = preserve
20 | docstrings.style = Asterisk
21 | docstrings.oneline = unfold
22 | trailingCommas = "preserve"
23 | optIn.breaksInsideChains = true
24 | includeCurlyBraceInSelectChains = true
25 | align.preset = most
26 | rewrite.scala3.convertToNewSyntax = true
27 | runner.dialectOverride.allowAsForImportRename = true
28 | runner.dialectOverride.allowStarWildcardImport = true
29 | runner.dialectOverride.allowPostfixStarVarargSplices = true
30 | runner.dialectOverride.allowQuestionMarkAsTypeWildcard = true
31 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | # The MIT License (MIT)
2 |
3 | Copyright 2018 Iurii Malchenko
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6 |
7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8 |
9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10 |
11 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # frontroute
2 |
3 |  
4 |
5 | `frontroute` is a front-end router library for single-page applications (SPA) built with [Scala.js](http://www.scala-js.org/) and [raquo/Laminar](https://github.com/raquo/Laminar),
6 | with an API inspired by [Akka HTTP](https://doc.akka.io/docs/akka-http/current/).
7 |
8 | ## Important
9 |
10 | Starting with version `0.19.1` the dependency organization name has changed from `io.frontroute` to `dev.frontroute`.
11 |
12 | ## Example project
13 |
14 | An example is available here: https://github.com/yurique/frontroute-example
15 |
16 | ## Documentation
17 |
18 | https://frontroute.dev
19 |
20 | ## Author
21 |
22 | Iurii Malchenko – [@yurique](https://twitter.com/yurique)
23 |
24 |
25 | ## License
26 |
27 | `frontroute` is provided under the [MIT license](https://github.com/tulz-app/frontroute/blob/main/LICENSE.md).
28 |
29 |
--------------------------------------------------------------------------------
/modules/frontroute/src/main/scala/frontroute/BrowserLocationProvider.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import com.raquo.laminar.api.L.*
4 | import org.scalajs.dom
5 |
6 | import scala.scalajs.js
7 |
8 | class BrowserLocationProvider(
9 | popStateEvents: EventStream[dom.PopStateEvent]
10 | ) extends LocationProvider {
11 |
12 | private val currentVar = Var(Option.empty[Location])
13 | val current: Signal[Option[Location]] = currentVar.signal.distinct
14 |
15 | def start()(implicit owner: Owner): Subscription = {
16 | EventStream
17 | .merge(
18 | EventStream.fromValue(js.undefined: js.Any),
19 | popStateEvents.map(_.state),
20 | )
21 | .map(state => Location(dom.window.location, state))
22 | .foreach { l =>
23 | currentVar.set(Some(l))
24 | }
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/modules/frontroute/src/main/scala/frontroute/ConjunctionMagnet.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import app.tulz.tuplez.Composition
4 |
5 | trait ConjunctionMagnet[L] {
6 | type Out
7 | def apply(underlying: Directive[L]): Out
8 | }
9 |
10 | object ConjunctionMagnet {
11 |
12 | implicit def fromDirective[L, R](other: Directive[R])(implicit
13 | composition: Composition[L, R]
14 | ): ConjunctionMagnet[L] {
15 | type Out = Directive[composition.Composed]
16 | } =
17 | new ConjunctionMagnet[L] {
18 | type Out = Directive[composition.Composed]
19 | def apply(underlying: Directive[L]): Directive[composition.Composed] =
20 | Directive[composition.Composed] { inner => (location, previous, state) =>
21 | underlying.tapply { prefix => (location, previous, state) =>
22 | other.tapply { suffix =>
23 | inner(composition.compose(prefix, suffix))
24 | }(location, previous, state.enterConjunction)
25 | }(location, previous, state)
26 | }
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/modules/frontroute/src/main/scala/frontroute/CustomLocationProvider.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import com.raquo.laminar.api.L.*
4 | import frontroute.internal.UrlString
5 |
6 | import scala.scalajs.js
7 |
8 | class CustomLocationProvider(locationStrings: Signal[String]) extends LocationProvider {
9 |
10 | val current: Signal[Option[Location]] = locationStrings.map { case UrlString(location) =>
11 | Some(Location(location, js.undefined))
12 | }
13 |
14 | def start()(implicit owner: Owner): Subscription = new Subscription(owner, () => {})
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/modules/frontroute/src/main/scala/frontroute/DirectiveExecute.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | trait DirectiveExecute[In] {
4 |
5 | def execute(run: In): Route
6 |
7 | }
8 |
9 | trait DirectiveUnitExecute {
10 |
11 | def execute(run: => Unit): Route
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/modules/frontroute/src/main/scala/frontroute/Location.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import frontroute.internal.HistoryState
4 | import org.scalajs.dom
5 | import scala.scalajs.js
6 |
7 | final case class Location(
8 | hostname: String,
9 | port: String,
10 | protocol: String,
11 | host: String,
12 | origin: String,
13 | path: List[String],
14 | fullPath: List[String],
15 | params: Map[String, Seq[String]],
16 | state: js.UndefOr[js.Any],
17 | otherMatched: Boolean
18 | ) {
19 |
20 | @inline def withUnmatchedPath(path: List[String]): Location = this.copy(path = path)
21 |
22 | private[frontroute] val parsedState = HistoryState.tryParse(state)
23 |
24 | override def toString: String =
25 | s"path: '${path.mkString("/")}${if (params.nonEmpty) "?" else ""}${params
26 | .flatMap { case (name, values) =>
27 | values.map(value => s"$name=$value")
28 | }
29 | .mkString("&")}'"
30 |
31 | }
32 |
33 | object Location {
34 |
35 | def apply(location: dom.Location, state: js.UndefOr[js.Any]): Location = {
36 | val path = extractPath(location)
37 | new Location(
38 | hostname = location.hostname,
39 | port = location.port,
40 | protocol = location.protocol,
41 | host = location.host,
42 | origin = location.origin,
43 | path = path,
44 | fullPath = path,
45 | params = LocationUtils.parseLocationParams(location),
46 | state = state,
47 | otherMatched = false
48 | )
49 | }
50 |
51 | private def extractPath(location: dom.Location): List[String] = {
52 | location.pathname.dropWhile(_ == '/').split('/').toList.dropWhile(_.isEmpty)
53 | }
54 |
55 | }
56 |
--------------------------------------------------------------------------------
/modules/frontroute/src/main/scala/frontroute/LocationProvider.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import com.raquo.laminar.api.L.*
4 | import com.raquo.airstream.core.EventStream
5 | import org.scalajs.dom
6 |
7 | trait LocationProvider {
8 |
9 | def current: Signal[Option[Location]]
10 | def start()(implicit owner: Owner): Subscription
11 |
12 | }
13 |
14 | object LocationProvider {
15 |
16 | lazy val windowLocationProvider: LocationProvider = browser(windowEvents(_.onPopState))
17 |
18 | def browser(popStateEvents: EventStream[dom.PopStateEvent]): LocationProvider = new BrowserLocationProvider(popStateEvents.delay(0))
19 |
20 | def custom(locationStrings: Signal[String]) = new CustomLocationProvider(locationStrings)
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/modules/frontroute/src/main/scala/frontroute/LocationUtils.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import org.scalajs.dom
4 | import scala.scalajs.js.URIUtils.encodeURIComponent
5 | import scala.scalajs.js.URIUtils.decodeURIComponent
6 |
7 | object LocationUtils {
8 |
9 | def parseLocationParams(location: dom.Location): Map[String, Seq[String]] = {
10 | val vars = location.search.dropWhile(_ == '?').split('&')
11 | val result = scala.collection.mutable.Map[String, Seq[String]]()
12 | vars.foreach { entry =>
13 | entry.split('=') match {
14 | case Array(key, value) =>
15 | val decodedKey = decodeURIComponent(key)
16 | val decodedValue = decodeURIComponent(value)
17 | result(decodedKey) = result.getOrElse(decodedKey, Seq.empty) :+ decodedValue
18 | case _ =>
19 | }
20 | }
21 | result.toMap
22 | }
23 |
24 | @inline def encodeLocationParams(params: Map[String, Seq[String]]): String =
25 | encodeLocationParams(params.toSeq)
26 |
27 | def encodeLocationParams(params: Seq[(String, Seq[String])]): String =
28 | if (params.isEmpty) {
29 | ""
30 | } else {
31 | s"?${params
32 | .flatMap { case (name, values) =>
33 | values.map { value =>
34 | s"${encodeURIComponent(name)}=${encodeURIComponent(value)}"
35 | }
36 | }.mkString("&")}"
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/modules/frontroute/src/main/scala/frontroute/NavElement.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | object NavElement {}
4 |
--------------------------------------------------------------------------------
/modules/frontroute/src/main/scala/frontroute/PageStatusCode.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | sealed trait PageStatusCode extends Product with Serializable
4 |
5 | object PageStatusCode {
6 |
7 | case object Ok extends PageStatusCode
8 | case object Error extends PageStatusCode
9 | case object NotFound extends PageStatusCode
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/modules/frontroute/src/main/scala/frontroute/RouteResult.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import com.raquo.laminar.api.L.*
4 | import frontroute.internal.RoutingState
5 |
6 | sealed trait RouteResult extends Product with Serializable
7 |
8 | object RouteResult {
9 | final case class Matched(state: RoutingState, location: Location, consumed: List[String], result: () => HtmlElement) extends RouteResult
10 | final case class RunEffect(state: RoutingState, location: Location, consumed: List[String], run: () => Unit) extends RouteResult
11 | case object Rejected extends RouteResult
12 | }
13 |
--------------------------------------------------------------------------------
/modules/frontroute/src/main/scala/frontroute/ScrollPosition.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | final case class ScrollPosition(
4 | scrollX: Option[Int],
5 | scrollY: Option[Int]
6 | )
7 |
--------------------------------------------------------------------------------
/modules/frontroute/src/main/scala/frontroute/domext/WindowWithScrollXY.scala:
--------------------------------------------------------------------------------
1 | package frontroute.domext
2 |
3 | import scala.scalajs.js
4 |
5 | @js.native
6 | private[frontroute] trait WindowWithScrollXY extends js.Object {
7 |
8 | val scrollX: js.UndefOr[Double] // = js.native
9 | val scrollY: js.UndefOr[Double] // = js.native
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/modules/frontroute/src/main/scala/frontroute/internal/HistoryState.scala:
--------------------------------------------------------------------------------
1 | package frontroute.internal
2 |
3 | import org.scalajs.dom
4 |
5 | import scala.scalajs.js
6 |
7 | private[frontroute] class HistoryStateScrollPosition(
8 | val scrollX: js.UndefOr[Double],
9 | val scrollY: js.UndefOr[Double]
10 | ) extends js.Object
11 |
12 | private[frontroute] class FrontrouteHistoryState(
13 | val scroll: js.UndefOr[HistoryStateScrollPosition]
14 | ) extends js.Object
15 |
16 | private[frontroute] class HistoryState(
17 | var internal: js.UndefOr[FrontrouteHistoryState],
18 | var user: js.UndefOr[js.Any],
19 | val frontroute: js.UndefOr[String] = "frontroute"
20 | ) extends js.Object {}
21 |
22 | object HistoryState {
23 |
24 | def tryParse(raw: js.UndefOr[js.Any]): Option[HistoryState] = {
25 | if (js.isUndefined(raw) || raw == null) {
26 | Some(new HistoryState(js.undefined, js.undefined))
27 | } else {
28 | val state = raw.asInstanceOf[HistoryState]
29 | if (state.frontroute.contains("frontroute")) {
30 | Some(state)
31 | } else {
32 | dom.console.debug("history state was set outside frontroute", state, state.isInstanceOf[HistoryState])
33 | None
34 | }
35 | }
36 | }
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/modules/frontroute/src/main/scala/frontroute/internal/PathMatchResult.scala:
--------------------------------------------------------------------------------
1 | package frontroute.internal
2 |
3 | sealed abstract class PathMatchResult[+A] extends Product with Serializable {
4 |
5 | def map[B](f: A => B): PathMatchResult[B] = this match {
6 | case PathMatchResult.NoMatch => PathMatchResult.NoMatch
7 | case PathMatchResult.Rejected(tail) => PathMatchResult.Rejected(tail)
8 | case PathMatchResult.Match(value, consumed, tail) => PathMatchResult.Match(f(value), consumed, tail)
9 | }
10 |
11 | }
12 |
13 | object PathMatchResult {
14 |
15 | case object NoMatch extends PathMatchResult[Nothing]
16 | case class Rejected[T](
17 | tail: List[String]
18 | ) extends PathMatchResult[T]
19 | case class Match[T](
20 | value: T,
21 | consumed: List[String],
22 | tail: List[String]
23 | ) extends PathMatchResult[T]
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/modules/frontroute/src/main/scala/frontroute/internal/RoutingPathStep.scala:
--------------------------------------------------------------------------------
1 | package frontroute.internal
2 |
3 | sealed abstract class RoutingPathStep(repr: String) extends Product with Serializable {
4 | override def toString: String = repr
5 | }
6 |
7 | object RoutingPathStep {
8 |
9 | case object Initial extends RoutingPathStep("i")
10 | case object Dir extends RoutingPathStep("d")
11 | case class Concat(index: Int) extends RoutingPathStep(index.toString)
12 | case object Disjunction extends RoutingPathStep("j")
13 | case object EnterDisjunction extends RoutingPathStep("e")
14 | case object Conjunction extends RoutingPathStep("c")
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/modules/frontroute/src/main/scala/frontroute/internal/UrlString.scala:
--------------------------------------------------------------------------------
1 | package frontroute.internal
2 |
3 | import org.scalajs.dom
4 | import scala.scalajs.js
5 |
6 | object UrlString {
7 |
8 | def unapply(url: String): Some[dom.Location] = {
9 | val l = dom.document.createElement("a").asInstanceOf[dom.HTMLAnchorElement]
10 | l.href = url
11 | Some(
12 | js.Dynamic
13 | .literal(
14 | hash = l.hash,
15 | protocol = l.protocol,
16 | search = l.search,
17 | href = l.href,
18 | hostname = l.hostname,
19 | port = l.port,
20 | pathname = l.pathname,
21 | host = l.host
22 | )
23 | .asInstanceOf[dom.Location]
24 | )
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/modules/frontroute/src/main/scala/frontroute/ops/DirectiveOfOptionOps.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 | package ops
3 |
4 | class DirectiveOfOptionOps[A](underlying: Directive[Option[A]]) {
5 |
6 | @inline def mapOption[R](f: A => R): Directive[Option[R]] = underlying.map(_.map(f))
7 |
8 | @inline def default(v: => A): Directive[A] = underlying.map(_.getOrElse(v))
9 |
10 | @inline def collectOption[R](f: PartialFunction[A, R]): Directive[Option[R]] = underlying.map(_.collect(f))
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/ConjunctionTests.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import frontroute.testing.*
4 |
5 | class ConjunctionTests extends TestBase {
6 |
7 | test("conjunction") {
8 | routeTest(
9 | route = probe =>
10 | pathPrefix("prefix1") {
11 | pathPrefix("prefix2") {
12 | (path(segment) & param("param1")) { (seg, paramValue) =>
13 | testComplete {
14 | probe.append(s"prefix1/prefix2/$seg?param1=$paramValue")
15 | }
16 | }
17 | }
18 | },
19 | init = locationProvider => {
20 | locationProvider.path("prefix1", "prefix2", "other-suffix-1")
21 | locationProvider.params("param1" -> "param1-value1")
22 | locationProvider.params("param1" -> "param1-value2")
23 | locationProvider.params("param1" -> "param1-value2") // dup
24 | locationProvider.path("prefix1", "prefix2", "other-suffix-2")
25 | }
26 | ) { probe =>
27 | probe.toList shouldBe List(
28 | "prefix1/prefix2/other-suffix-1?param1=param1-value1",
29 | "prefix1/prefix2/other-suffix-1?param1=param1-value2",
30 | "prefix1/prefix2/other-suffix-2?param1=param1-value2"
31 | )
32 | }
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/Disjunction2xAndCollectTests.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import frontroute.testing.*
4 |
5 | class Disjunction2xAndCollectTests extends TestBase {
6 |
7 | test("2x disjunction and .collect") {
8 | case class Page(index: Int)
9 | routeTest(
10 | route = probe =>
11 | (
12 | pathEnd.collect { case _ => 0 } |
13 | path("page-1").collect { case _ => 1 } |
14 | path("page-2").collect { case _ => 2 }
15 | ) { index =>
16 | testComplete {
17 | probe.append(Page(index).toString)
18 | }
19 | },
20 | init = locationProvider => {
21 | locationProvider.path()
22 | locationProvider.path("page-1")
23 | locationProvider.path()
24 | locationProvider.path("page-1")
25 | locationProvider.path("page-2")
26 | locationProvider.path()
27 | locationProvider.path("page-2")
28 | locationProvider.path()
29 | }
30 | ) { probe =>
31 | probe.toList shouldBe Seq(
32 | Page(0).toString,
33 | Page(1).toString,
34 | Page(0).toString,
35 | Page(1).toString,
36 | Page(2).toString,
37 | Page(0).toString,
38 | Page(2).toString,
39 | Page(0).toString
40 | )
41 | }
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/Disjunction2xAndMapTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import frontroute.testing.*
4 |
5 | class Disjunction2xAndMapTest extends TestBase {
6 |
7 | test("2x disjunction and .map") {
8 | case class Page(index: Int)
9 | routeTest(
10 | route = probe =>
11 | (
12 | pathEnd.map(_ => 0) |
13 | path("page-1").map(_ => 1) |
14 | path("page-2").map(_ => 2)
15 | ) { index =>
16 | testComplete {
17 | probe.append(Page(index).toString)
18 | }
19 | },
20 | init = locationProvider => {
21 | locationProvider.path()
22 | locationProvider.path("page-1")
23 | locationProvider.path()
24 | locationProvider.path("page-1")
25 | locationProvider.path("page-2")
26 | locationProvider.path()
27 | locationProvider.path("page-2")
28 | locationProvider.path()
29 | }
30 | ) { probe =>
31 | probe.toList shouldBe Seq(
32 | Page(0).toString,
33 | Page(1).toString,
34 | Page(0).toString,
35 | Page(1).toString,
36 | Page(2).toString,
37 | Page(0).toString,
38 | Page(2).toString,
39 | Page(0).toString
40 | )
41 | }
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/Disjunction2xAndMapToTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import frontroute.testing.*
4 |
5 | class Disjunction2xAndMapToTest extends TestBase {
6 |
7 | test("2x disjunction and .mapTo") {
8 | case class Page(index: Int)
9 | routeTest(
10 | route = probe =>
11 | (
12 | pathEnd.mapTo(0) |
13 | path("page-1").mapTo(1) |
14 | path("page-2").mapTo(2)
15 | ) { index =>
16 | testComplete {
17 | probe.append(Page(index).toString)
18 | }
19 | },
20 | init = locationProvider => {
21 | locationProvider.path()
22 | locationProvider.path("page-1")
23 | locationProvider.path()
24 | locationProvider.path("page-1")
25 | locationProvider.path("page-2")
26 | locationProvider.path()
27 | locationProvider.path("page-2")
28 | locationProvider.path()
29 | }
30 | ) { probe =>
31 | probe.toList shouldBe Seq(
32 | Page(0).toString,
33 | Page(1).toString,
34 | Page(0).toString,
35 | Page(1).toString,
36 | Page(2).toString,
37 | Page(0).toString,
38 | Page(2).toString,
39 | Page(0).toString
40 | )
41 | }
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/Disjunction3xSignalTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import com.raquo.airstream.core.Signal
4 | import frontroute.testing.*
5 | import scala.concurrent.Future
6 |
7 | class Disjunction3xSignalTest extends TestBase {
8 |
9 | test("disjunction 3x signal") {
10 | var pathSignal: Signal[String] = null
11 | var signals: Future[List[String]] = null
12 | routeTestF(
13 | route = probe =>
14 | pathPrefix("prefix1") {
15 | pathPrefix("prefix2") {
16 | (
17 | path("suffix-1").mapTo("suffix-1") |
18 | path("suffix-2").mapTo("suffix-2") |
19 | path("suffix-3").mapTo("suffix-3") |
20 | pathEnd.mapTo("default")
21 | ).signal { s =>
22 | testComplete {
23 | pathSignal = s
24 | signals = nSignals(5, pathSignal)
25 | probe.append("prefix1/prefix2")
26 | }
27 | }
28 | }
29 | },
30 | init = locationProvider => {
31 | locationProvider.path("prefix1", "prefix2")
32 | locationProvider.path("prefix1", "prefix2", "suffix-1")
33 | locationProvider.path("prefix1", "prefix2", "suffix-1")
34 | locationProvider.path("prefix1", "prefix2", "suffix-2")
35 | locationProvider.path("prefix1", "prefix2", "suffix-3")
36 | }
37 | ) { probe =>
38 | signals
39 | .map { suffixes =>
40 | suffixes shouldBe List(
41 | "default",
42 | "suffix-1",
43 | "suffix-1",
44 | "suffix-2",
45 | "suffix-3"
46 | )
47 | probe.toList shouldBe List(
48 | "prefix1/prefix2"
49 | )
50 | }
51 | }
52 | }
53 |
54 | }
55 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/DisjunctionAndCollectTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import frontroute.testing.*
4 |
5 | class DisjunctionAndCollectTest extends TestBase {
6 |
7 | test("disjunction and .collect") {
8 | case class Page(isIndex: Boolean)
9 | routeTest(
10 | route = probe =>
11 | (pathEnd.collect { case _ => true } | path("page-1").collect { case _ => false }) { isIndex =>
12 | testComplete {
13 | probe.append(Page(isIndex).toString)
14 | }
15 | },
16 | init = locationProvider => {
17 | locationProvider.path()
18 | locationProvider.path("page-1")
19 | locationProvider.path()
20 | locationProvider.path("page-1")
21 | locationProvider.path()
22 | }
23 | ) { probe =>
24 | probe.toList shouldBe Seq(
25 | Page(true).toString,
26 | Page(false).toString,
27 | Page(true).toString,
28 | Page(false).toString,
29 | Page(true).toString
30 | )
31 | }
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/DisjunctionAndMapTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import frontroute.testing.*
4 |
5 | class DisjunctionAndMapTest extends TestBase {
6 |
7 | test("disjunction and .map") {
8 | case class Page(isIndex: Boolean)
9 | routeTest(
10 | route = probe =>
11 | (pathEnd.map(_ => true) | path("page-1").map(_ => false)) { isIndex =>
12 | testComplete {
13 | probe.append(Page(isIndex).toString)
14 | }
15 | },
16 | init = locationProvider => {
17 | locationProvider.path()
18 | locationProvider.path("page-1")
19 | locationProvider.path()
20 | locationProvider.path("page-1")
21 | locationProvider.path()
22 | }
23 | ) { probe =>
24 | probe.toList shouldBe Seq(
25 | Page(true).toString,
26 | Page(false).toString,
27 | Page(true).toString,
28 | Page(false).toString,
29 | Page(true).toString
30 | )
31 | }
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/DisjunctionAndMapToTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import frontroute.testing.*
4 |
5 | class DisjunctionAndMapToTest extends TestBase {
6 |
7 | test("disjunction and .mapTo") {
8 | case class Page(isIndex: Boolean)
9 | routeTest(
10 | route = probe =>
11 | (pathEnd.mapTo(true) | path("page-1").mapTo(false)) { isIndex =>
12 | testComplete {
13 | probe.append(Page(isIndex).toString)
14 | }
15 | },
16 | init = locationProvider => {
17 | locationProvider.path()
18 | locationProvider.path("page-1")
19 | locationProvider.path()
20 | locationProvider.path("page-1")
21 | locationProvider.path()
22 | }
23 | ) { probe =>
24 | probe.toList shouldBe Seq(
25 | Page(true).toString,
26 | Page(false).toString,
27 | Page(true).toString,
28 | Page(false).toString,
29 | Page(true).toString
30 | )
31 | }
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/DisjunctionSignalTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import com.raquo.airstream.core.Signal
4 | import frontroute.testing.*
5 |
6 | import scala.concurrent.Future
7 |
8 | class DisjunctionSignalTest extends TestBase {
9 |
10 | test("disjunction signal") {
11 | var pathSignal: Signal[String] = null
12 | var signals: Future[List[String]] = null
13 | routeTestF(
14 | route = probe =>
15 | pathPrefix("prefix1") {
16 | pathPrefix("prefix2") {
17 | (path(segment) | pathEnd.map(_ => "default")).signal { s =>
18 | testComplete {
19 | pathSignal = s
20 | signals = nSignals(5, pathSignal)
21 | probe.append("prefix1/prefix2")
22 | }
23 | }
24 | }
25 | },
26 | init = locationProvider => {
27 | locationProvider.path("prefix1", "prefix2")
28 | locationProvider.path("prefix1", "prefix2", "suffix-1")
29 | locationProvider.path("prefix1", "prefix2", "suffix-1")
30 | locationProvider.path("prefix1", "prefix2", "suffix-2")
31 | locationProvider.path("prefix1", "prefix2", "suffix-3")
32 | }
33 | ) { probe =>
34 | signals
35 | .map { suffixes =>
36 | suffixes shouldBe List(
37 | "default",
38 | "suffix-1",
39 | "suffix-1",
40 | "suffix-2",
41 | "suffix-3"
42 | )
43 | probe.toList shouldBe List(
44 | "prefix1/prefix2"
45 | )
46 | }
47 | }
48 | }
49 |
50 | }
51 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/ExtractHostNameTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import frontroute.testing.*
4 |
5 | class ExtractHostNameTest extends TestBase {
6 |
7 | test("extractHostname") {
8 | routeTest(
9 | route = probe =>
10 | extractHostname { hostname =>
11 | testComplete {
12 | probe.append(hostname)
13 | }
14 | },
15 | init = locationProvider => {
16 | locationProvider.path()
17 | }
18 | ) { probe =>
19 | probe.toList shouldBe List("test.nowhere")
20 | }
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/ExtractHostTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import frontroute.testing.*
4 |
5 | import scala.scalajs.js
6 | import scala.scalajs.js.JSON
7 |
8 | class ExtractHostTest extends TestBase {
9 |
10 | test("extractHost") {
11 | routeTest(
12 | route = probe =>
13 | extractHost { host =>
14 | testComplete {
15 | probe.append(host)
16 | }
17 | },
18 | init = locationProvider => {
19 | locationProvider.path()
20 | }
21 | ) { probe =>
22 | probe.toList shouldBe List("test.nowhere:443")
23 | }
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/ExtractOriginTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import frontroute.testing.*
4 |
5 | import scala.scalajs.js
6 | import scala.scalajs.js.JSON
7 |
8 | class ExtractOriginTest extends TestBase {
9 |
10 | test("extractOrigin") {
11 | routeTest(
12 | route = probe =>
13 | extractOrigin { origin =>
14 | testComplete {
15 | probe.append(origin)
16 | }
17 | },
18 | init = locationProvider => {
19 | locationProvider.path()
20 | }
21 | ) { probe =>
22 | probe.toList shouldBe List("https://test.nowhere:443")
23 | }
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/ExtractPortTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import frontroute.testing.*
4 |
5 | import scala.scalajs.js
6 | import scala.scalajs.js.JSON
7 |
8 | class ExtractPortTest extends TestBase {
9 |
10 | test("extractPort") {
11 | routeTest(
12 | route = probe =>
13 | extractPort { port =>
14 | testComplete {
15 | probe.append(port)
16 | }
17 | },
18 | init = locationProvider => {
19 | locationProvider.path()
20 | }
21 | ) { probe =>
22 | probe.toList shouldBe List("443")
23 | }
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/ExtractProtocolTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import frontroute.testing.*
4 |
5 | import scala.scalajs.js
6 | import scala.scalajs.js.JSON
7 |
8 | class ExtractProtocolTest extends TestBase {
9 |
10 | test("extractProtocol") {
11 | routeTest(
12 | route = probe =>
13 | extractProtocol { protocol =>
14 | testComplete {
15 | probe.append(protocol)
16 | }
17 | },
18 | init = locationProvider => {
19 | locationProvider.path()
20 | }
21 | ) { probe =>
22 | probe.toList shouldBe List("https")
23 | }
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/HistoryStateTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import frontroute.testing.*
4 |
5 | import scala.scalajs.js
6 | import scala.scalajs.js.JSON
7 |
8 | class HistoryStateTest extends TestBase {
9 |
10 | test("historyState") {
11 | routeTest(
12 | route = probe =>
13 | historyState { state =>
14 | testComplete {
15 | probe.append(JSON.stringify(state.getOrElse("NO-STATE")))
16 | }
17 | },
18 | init = locationProvider => {
19 | locationProvider.path("state-test")
20 | locationProvider.state(js.Dynamic.literal(a = "test"))
21 | locationProvider.state(js.Dynamic.literal(a = "test", b = "something"))
22 | }
23 | ) { probe =>
24 | probe.toList shouldBe List(""""NO-STATE"""", """{"a":"test"}""", """{"a":"test","b":"something"}""")
25 | }
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/ParamSignalTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import com.raquo.airstream.core.Signal
4 | import frontroute.testing.*
5 |
6 | import scala.concurrent.Future
7 |
8 | class ParamSignalTest extends TestBase {
9 |
10 | test("param signal") {
11 | var paramSignal: Signal[String] = null
12 | var signals: Future[List[String]] = null
13 | routeTestF(
14 | route = probe =>
15 | pathPrefix("prefix1") {
16 | pathPrefix("prefix2") {
17 | param("test-param").signal { s =>
18 | testComplete {
19 | paramSignal = s
20 | signals = nSignals(3, paramSignal)
21 | probe.append("prefix1/prefix2")
22 | }
23 | }
24 | }
25 | },
26 | init = locationProvider => {
27 | locationProvider.path("prefix1", "prefix2")
28 | locationProvider.params("test-param" -> "value-1")
29 | locationProvider.params("test-param" -> "value-2")
30 | locationProvider.params("test-param" -> "value-3")
31 | }
32 | ) { probe =>
33 | signals
34 | .map { params =>
35 | params shouldBe List(
36 | "value-1",
37 | "value-2",
38 | "value-3"
39 | )
40 | probe.toList shouldBe List(
41 | "prefix1/prefix2"
42 | )
43 | }
44 | }
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/SignalX1Test.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import com.raquo.airstream.core.Signal
4 | import frontroute.testing.*
5 |
6 | import scala.concurrent.Future
7 |
8 | class SignalX1Test extends TestBase {
9 |
10 | test("signal x1") {
11 | var pathSignal: Signal[String] = null
12 | var signals: Future[List[String]] = null
13 | routeTestF(
14 | route = probe =>
15 | pathPrefix("prefix1") {
16 | pathPrefix("prefix2") {
17 | path(segment).signal { s =>
18 | testComplete {
19 | pathSignal = s
20 | signals = nSignals(1, pathSignal)
21 | probe.append("prefix1/prefix2")
22 | }
23 | }
24 | }
25 | },
26 | init = locationProvider => {
27 | locationProvider.path("prefix1", "prefix2", "other-suffix-1")
28 | }
29 | ) { probe =>
30 | signals
31 | .map { params =>
32 | params shouldBe List(
33 | "other-suffix-1"
34 | )
35 | probe.toList shouldBe List(
36 | "prefix1/prefix2"
37 | )
38 | }
39 | }
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/SignalX3Test.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import com.raquo.airstream.core.Signal
4 | import frontroute.testing.*
5 |
6 | import scala.concurrent.Future
7 |
8 | class SignalX3Test extends TestBase {
9 |
10 | test("signal x3") {
11 | var pathSignal: Signal[String] = null
12 | var signals: Future[List[String]] = null
13 | routeTestF(
14 | route = probe =>
15 | pathPrefix("prefix1") {
16 | pathPrefix("prefix2") {
17 | path(segment).signal { s =>
18 | testComplete {
19 | pathSignal = s
20 | signals = nSignals(3, pathSignal)
21 | probe.append("prefix1/prefix2")
22 | }
23 | }
24 | }
25 | },
26 | init = locationProvider => {
27 | locationProvider.path("prefix1", "prefix2", "other-suffix-1")
28 | locationProvider.path("prefix1", "prefix2", "other-suffix-2")
29 | locationProvider.path("prefix1", "prefix2", "other-suffix-3")
30 | }
31 | ) { probe =>
32 | signals
33 | .map { params =>
34 | params shouldBe List(
35 | "other-suffix-1",
36 | "other-suffix-2",
37 | "other-suffix-3"
38 | )
39 | probe.toList shouldBe List(
40 | "prefix1/prefix2"
41 | )
42 | }
43 | }
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/pathDirectives/PathWithOneOfAndRecoverTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute.pathDirectives
2 |
3 | import frontroute.testing.TestBase
4 | import frontroute.*
5 |
6 | class PathWithOneOfAndRecoverTest extends TestBase {
7 |
8 | test("path with oneOf path matcher and recover") {
9 | routeTest(
10 | route = probe =>
11 | path(segment(Set("a", "b")).recover("default")) { str =>
12 | testComplete {
13 | probe.append(str)
14 | }
15 | },
16 | init = locationProvider => {
17 | locationProvider.path("a")
18 | locationProvider.path("b")
19 | locationProvider.path("c")
20 | }
21 | ) { probe =>
22 | probe.toList shouldBe List("a", "b", "default")
23 | }
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/pathDirectives/PathWithOneOfTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute.pathDirectives
2 |
3 | import frontroute.testing.TestBase
4 | import frontroute.*
5 |
6 | class PathWithOneOfTest extends TestBase {
7 |
8 | test("path with oneOf path matcher") {
9 | routeTest(
10 | route = probe =>
11 | path(segment(Set("a", "b"))) { str =>
12 | testComplete {
13 | probe.append(str)
14 | }
15 | },
16 | init = locationProvider => {
17 | locationProvider.path("a")
18 | locationProvider.path("b")
19 | }
20 | ) { probe =>
21 | probe.toList shouldBe List("a", "b")
22 | }
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/pathDirectives/RevisitPreviousMatchTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute.pathDirectives
2 |
3 | import frontroute.testing.TestBase
4 | import frontroute.*
5 |
6 | class RevisitPreviousMatchTest extends TestBase {
7 |
8 | test("revisit previous match") {
9 | routeTest(
10 | route = probe =>
11 | firstMatch(
12 | pathEnd {
13 | testComplete {
14 | probe.append("end")
15 | }
16 | },
17 | path("path1") {
18 | testComplete {
19 | probe.append("path1")
20 | }
21 | }
22 | ),
23 | init = locationProvider => {
24 | locationProvider.path()
25 | locationProvider.path("path1")
26 | locationProvider.path()
27 | }
28 | ) { probe =>
29 | probe.toList shouldBe List("end", "path1", "end")
30 | }
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/pathDirectives/SimplePathEndTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute.pathDirectives
2 |
3 | import frontroute.*
4 | import frontroute.testing.TestBase
5 |
6 | class SimplePathEndTest extends TestBase {
7 |
8 | test("simple pathEnd") {
9 | routeTest(
10 | route = probe =>
11 | pathEnd {
12 | testComplete {
13 | probe.append("end")
14 | }
15 | },
16 | init = locationProvider => {
17 | locationProvider.path()
18 | }
19 | ) { probe =>
20 | probe.toList shouldBe List("end")
21 | }
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/pathDirectives/TestPathPrefixTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute.pathDirectives
2 |
3 | import frontroute.testing.TestBase
4 | import frontroute.*
5 |
6 | class TestPathPrefixTest extends TestBase {
7 |
8 | test("test path prefix") {
9 | routeTest(
10 | route = probe =>
11 | testPathPrefix("a" / "b") {
12 | extractUnmatchedPath { unmatched =>
13 | testComplete {
14 | probe.append(unmatched.mkString("/"))
15 | }
16 | }
17 | },
18 | init = locationProvider => {
19 | locationProvider.path("a", "b", "c", "d")
20 | }
21 | ) { probe =>
22 | probe.toList shouldBe List("a/b/c/d")
23 | }
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/pathDirectives/TestPathTest.scala:
--------------------------------------------------------------------------------
1 | package frontroute.pathDirectives
2 |
3 | import frontroute.testing.TestBase
4 | import frontroute.*
5 |
6 | class TestPathTest extends TestBase {
7 |
8 | test("test path") {
9 | routeTest(
10 | route = probe =>
11 | testPath("a" / "b" / "c" / "d") {
12 | extractUnmatchedPath { unmatched =>
13 | testComplete {
14 | probe.append(unmatched.mkString("/"))
15 | }
16 | }
17 | },
18 | init = locationProvider => {
19 | locationProvider.path("a", "b", "c", "d")
20 | }
21 | ) { probe =>
22 | probe.toList shouldBe List("a/b/c/d")
23 | }
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/modules/frontroute/src/test/scala/frontroute/testing/package.scala:
--------------------------------------------------------------------------------
1 | package frontroute
2 |
3 | import scala.concurrent.duration.FiniteDuration
4 | import scala.concurrent.Future
5 | import scala.concurrent.Promise
6 | import scala.scalajs.js
7 | import scala.scalajs.concurrent.JSExecutionContext.Implicits.queue
8 |
9 | package object testing {
10 |
11 | def delayedFuture(duration: FiniteDuration): Future[Unit] =
12 | Future.unit.delayed(duration)
13 |
14 | implicit class FutureExt[T](f: => Future[T]) {
15 |
16 | def delayed(duration: FiniteDuration): Future[T] = {
17 | val promise = Promise[T]()
18 | f.onComplete { t =>
19 | js.timers.setTimeout(duration) {
20 | promise.complete(t)
21 | }
22 | }
23 | promise.future
24 | }
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "devDependencies": {
4 | "jsdom": "^21.1.0"
5 | }
6 | }
--------------------------------------------------------------------------------
/project/DependencyVersions.scala:
--------------------------------------------------------------------------------
1 | object DependencyVersions {
2 |
3 | val laminar = "17.2.0"
4 | val `tuplez-apply` = "0.4.0"
5 | val domtestutils = "18.0.1"
6 | val scalatest = "3.2.19"
7 |
8 | // tests
9 | val `scala-js-macrotask-executor` = "1.1.1"
10 |
11 | // website
12 | val laminext = "0.17.1"
13 | val sourcecode = "0.4.1"
14 | val `embedded-files-macro` = "0.2.4"
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/project/JSEnv.scala:
--------------------------------------------------------------------------------
1 | sealed abstract class JSEnv(val isBrowser: Boolean)
2 | object JSEnv {
3 | case object Chrome extends JSEnv(true)
4 | case object Firefox extends JSEnv(true)
5 | case object JSDOMNodeJS extends JSEnv(false)
6 | case object NodeJS extends JSEnv(false)
7 | }
8 |
--------------------------------------------------------------------------------
/project/ScalaVersions.scala:
--------------------------------------------------------------------------------
1 | object ScalaVersions {
2 | val v213 = "2.13.15"
3 | val v3 = "3.3.4"
4 | }
5 |
--------------------------------------------------------------------------------
/project/build.properties:
--------------------------------------------------------------------------------
1 | sbt.version=1.10.6
2 |
--------------------------------------------------------------------------------
/project/plugins.sbt:
--------------------------------------------------------------------------------
1 | logLevel := Level.Warn
2 |
3 | libraryDependencies += "org.commonmark" % "commonmark" % "0.24.0"
4 | libraryDependencies += "org.scala-js" %% "scalajs-env-nodejs" % "1.4.0"
5 | libraryDependencies += "org.scala-js" %% "scalajs-env-selenium" % "1.1.1"
6 | libraryDependencies += "org.scala-js" %% "scalajs-env-jsdom-nodejs" % "1.1.0"
7 |
8 | addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.16.0")
9 |
10 | addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2")
11 |
12 | addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.3.1")
13 |
14 | addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.12.2")
15 |
16 | addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.2")
17 |
18 | addSbtPlugin("com.github.sbt" % "sbt-github-actions" % "0.24.0")
19 |
20 | addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.9.0")
21 |
22 | addSbtPlugin("ch.epfl.scala" % "sbt-version-policy" % "3.2.1")
23 |
24 | addSbtPlugin("com.yurique" % "sbt-embedded-files" % "0.4.0")
25 |
26 | addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.13.1")
27 |
--------------------------------------------------------------------------------
/website/.frontroute-version:
--------------------------------------------------------------------------------
1 | 0.19.x
--------------------------------------------------------------------------------
/website/.gitignore:
--------------------------------------------------------------------------------
1 | build/
2 | dist/
3 | .yarn/*
4 | !.yarn/releases
5 | !.yarn/plugins
6 | .pnp.js
7 |
8 |
--------------------------------------------------------------------------------
/website/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | frontroute, Laminar edition
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | <%- pl %>
16 |
17 |
18 |
19 |
20 |
21 | <%- script %>
22 |
23 |
--------------------------------------------------------------------------------
/website/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "license": "UNLICENSED",
4 | "dependencies": {
5 | "highlight.js": "^11.8.0"
6 | },
7 | "devDependencies": {
8 | "@rollup/plugin-commonjs": "^25.0.2",
9 | "@tailwindcss/aspect-ratio": "^0.4.2",
10 | "@tailwindcss/forms": "^0.5.3",
11 | "@tailwindcss/typography": "^0.5.9",
12 | "autoprefixer": "^10.4.14",
13 | "cssnano": "^6.0.1",
14 | "lodash": "^4.17.21",
15 | "postcss": "^8.4.25",
16 | "postcss-import": "^15.1.0",
17 | "postcss-preset-env": "^9.0.0",
18 | "stylelint": "^15.10.1",
19 | "stylelint-config-recommended": "^13.0.0",
20 | "stylelint-config-standard": "^34.0.0",
21 | "tailwindcss": "^3.3.2",
22 | "vite": "^4.4.2",
23 | "vite-plugin-compression": "^0.5.1",
24 | "vite-plugin-html": "^3.2.0"
25 | },
26 | "browserslist": [
27 | "defaults"
28 | ],
29 | "scripts": {
30 | "dev": "vite",
31 | "build": "vite build",
32 | "preview": "vite preview"
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/website/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = (api) => {
2 | const tailwindcss = require('./tailwind.config')(api)
3 | const plugins = {
4 | 'tailwindcss/nesting': {},
5 | 'postcss-import': {},
6 | tailwindcss,
7 | autoprefixer: {}
8 | }
9 | if (api.mode === 'production') {
10 | plugins.cssnano = {}
11 | }
12 | return {
13 | plugins
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/website/scala-version.js:
--------------------------------------------------------------------------------
1 | const scala2 = '2.13'
2 | const scala3 = '3.3.4'
3 |
4 | module.exports = scala3
5 |
--------------------------------------------------------------------------------
/website/src/main/public/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tulz-app/frontroute/6f13ad036ae6dfb1c5b557e392a9bfda2c2654fe/website/src/main/public/android-chrome-192x192.png
--------------------------------------------------------------------------------
/website/src/main/public/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tulz-app/frontroute/6f13ad036ae6dfb1c5b557e392a9bfda2c2654fe/website/src/main/public/android-chrome-512x512.png
--------------------------------------------------------------------------------
/website/src/main/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tulz-app/frontroute/6f13ad036ae6dfb1c5b557e392a9bfda2c2654fe/website/src/main/public/apple-touch-icon.png
--------------------------------------------------------------------------------
/website/src/main/public/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #da532c
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/website/src/main/public/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tulz-app/frontroute/6f13ad036ae6dfb1c5b557e392a9bfda2c2654fe/website/src/main/public/favicon-16x16.png
--------------------------------------------------------------------------------
/website/src/main/public/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tulz-app/frontroute/6f13ad036ae6dfb1c5b557e392a9bfda2c2654fe/website/src/main/public/favicon-32x32.png
--------------------------------------------------------------------------------
/website/src/main/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tulz-app/frontroute/6f13ad036ae6dfb1c5b557e392a9bfda2c2654fe/website/src/main/public/favicon.ico
--------------------------------------------------------------------------------
/website/src/main/public/mstile-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tulz-app/frontroute/6f13ad036ae6dfb1c5b557e392a9bfda2c2654fe/website/src/main/public/mstile-144x144.png
--------------------------------------------------------------------------------
/website/src/main/public/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tulz-app/frontroute/6f13ad036ae6dfb1c5b557e392a9bfda2c2654fe/website/src/main/public/mstile-150x150.png
--------------------------------------------------------------------------------
/website/src/main/public/mstile-310x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tulz-app/frontroute/6f13ad036ae6dfb1c5b557e392a9bfda2c2654fe/website/src/main/public/mstile-310x150.png
--------------------------------------------------------------------------------
/website/src/main/public/mstile-310x310.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tulz-app/frontroute/6f13ad036ae6dfb1c5b557e392a9bfda2c2654fe/website/src/main/public/mstile-310x310.png
--------------------------------------------------------------------------------
/website/src/main/public/mstile-70x70.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tulz-app/frontroute/6f13ad036ae6dfb1c5b557e392a9bfda2c2654fe/website/src/main/public/mstile-70x70.png
--------------------------------------------------------------------------------
/website/src/main/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/website/src/main/public/site.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "name": "",
3 | "short_name": "",
4 | "icons": [
5 | {
6 | "src": "/android-chrome-192x192.png",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | },
10 | {
11 | "src": "/android-chrome-512x512.png",
12 | "sizes": "512x512",
13 | "type": "image/png"
14 | }
15 | ],
16 | "theme_color": "#ffffff",
17 | "background_color": "#ffffff",
18 | "display": "standalone"
19 | }
20 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/an-old-hope.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | An Old Hope – Star Wars Syntax (c) Gustavo Costa
4 | Original theme - Ocean Dark Theme – by https://github.com/gavsiu
5 | Based on Jesse Leite's Atom syntax theme 'An Old Hope' – https://github.com/JesseLeite/an-old-hope-syntax-atom
6 |
7 | */
8 |
9 | /* Death Star Comment */
10 | .hljs-comment,
11 | .hljs-quote
12 | {
13 | color: #B6B18B;
14 | }
15 |
16 | /* Darth Vader */
17 | .hljs-variable,
18 | .hljs-template-variable,
19 | .hljs-tag,
20 | .hljs-name,
21 | .hljs-selector-id,
22 | .hljs-selector-class,
23 | .hljs-regexp,
24 | .hljs-deletion
25 | {
26 | color: #EB3C54;
27 | }
28 |
29 | /* Threepio */
30 | .hljs-number,
31 | .hljs-built_in,
32 | .hljs-builtin-name,
33 | .hljs-literal,
34 | .hljs-type,
35 | .hljs-params,
36 | .hljs-meta,
37 | .hljs-link
38 | {
39 | color: #E7CE56;
40 | }
41 |
42 | /* Luke Skywalker */
43 | .hljs-attribute
44 | {
45 | color: #EE7C2B;
46 | }
47 |
48 | /* Obi Wan Kenobi */
49 | .hljs-string,
50 | .hljs-symbol,
51 | .hljs-bullet,
52 | .hljs-addition
53 | {
54 | color: #4FB4D7;
55 | }
56 |
57 | /* Yoda */
58 | .hljs-title,
59 | .hljs-section
60 | {
61 | color: #78BB65;
62 | }
63 |
64 | /* Mace Windu */
65 | .hljs-keyword,
66 | .hljs-selector-tag
67 | {
68 | color: #B45EA4;
69 | }
70 |
71 | /* Millenium Falcon */
72 | .hljs
73 | {
74 | display: block;
75 | overflow-x: auto;
76 | background: #1C1D21;
77 | color: #c0c5ce;
78 | padding: 0.5em;
79 | }
80 |
81 | .hljs-emphasis
82 | {
83 | font-style: italic;
84 | }
85 |
86 | .hljs-strong
87 | {
88 | font-weight: bold;
89 | }
90 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/androidstudio.css:
--------------------------------------------------------------------------------
1 | /*
2 | Date: 24 Fev 2015
3 | Author: Pedro Oliveira
4 | */
5 |
6 | .hljs {
7 | color: #a9b7c6;
8 | background: #282b2e;
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | }
13 |
14 | .hljs-number,
15 | .hljs-literal,
16 | .hljs-symbol,
17 | .hljs-bullet {
18 | color: #6897BB;
19 | }
20 |
21 | .hljs-keyword,
22 | .hljs-selector-tag,
23 | .hljs-deletion {
24 | color: #cc7832;
25 | }
26 |
27 | .hljs-variable,
28 | .hljs-template-variable,
29 | .hljs-link {
30 | color: #629755;
31 | }
32 |
33 | .hljs-comment,
34 | .hljs-quote {
35 | color: #808080;
36 | }
37 |
38 | .hljs-meta {
39 | color: #bbb529;
40 | }
41 |
42 | .hljs-string,
43 | .hljs-attribute,
44 | .hljs-addition {
45 | color: #6A8759;
46 | }
47 |
48 | .hljs-section,
49 | .hljs-title,
50 | .hljs-type {
51 | color: #ffc66d;
52 | }
53 |
54 | .hljs-name,
55 | .hljs-selector-id,
56 | .hljs-selector-class {
57 | color: #e8bf6a;
58 | }
59 |
60 | .hljs-emphasis {
61 | font-style: italic;
62 | }
63 |
64 | .hljs-strong {
65 | font-weight: bold;
66 | }
67 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/arduino-light.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Arduino® Light Theme - Stefania Mellai
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #FFFFFF;
12 | }
13 |
14 | .hljs,
15 | .hljs-subst {
16 | color: #434f54;
17 | }
18 |
19 | .hljs-keyword,
20 | .hljs-attribute,
21 | .hljs-selector-tag,
22 | .hljs-doctag,
23 | .hljs-name {
24 | color: #00979D;
25 | }
26 |
27 | .hljs-built_in,
28 | .hljs-literal,
29 | .hljs-bullet,
30 | .hljs-code,
31 | .hljs-addition {
32 | color: #D35400;
33 | }
34 |
35 | .hljs-regexp,
36 | .hljs-symbol,
37 | .hljs-variable,
38 | .hljs-template-variable,
39 | .hljs-link,
40 | .hljs-selector-attr,
41 | .hljs-selector-pseudo {
42 | color: #00979D;
43 | }
44 |
45 | .hljs-type,
46 | .hljs-string,
47 | .hljs-selector-id,
48 | .hljs-selector-class,
49 | .hljs-quote,
50 | .hljs-template-tag,
51 | .hljs-deletion {
52 | color: #005C5F;
53 | }
54 |
55 | .hljs-title,
56 | .hljs-section {
57 | color: #880000;
58 | font-weight: bold;
59 | }
60 |
61 | .hljs-comment {
62 | color: rgba(149,165,166,.8);
63 | }
64 |
65 | .hljs-meta-keyword {
66 | color: #728E00;
67 | }
68 |
69 | .hljs-meta {
70 | color: #434f54;
71 | }
72 |
73 | .hljs-emphasis {
74 | font-style: italic;
75 | }
76 |
77 | .hljs-strong {
78 | font-weight: bold;
79 | }
80 |
81 | .hljs-function {
82 | color: #728E00;
83 | }
84 |
85 | .hljs-number {
86 | color: #8A7B52;
87 | }
88 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/arta.css:
--------------------------------------------------------------------------------
1 | /*
2 | Date: 17.V.2011
3 | Author: pumbur
4 | */
5 |
6 | .hljs {
7 | display: block;
8 | overflow-x: auto;
9 | padding: 0.5em;
10 | background: #222;
11 | }
12 |
13 | .hljs,
14 | .hljs-subst {
15 | color: #aaa;
16 | }
17 |
18 | .hljs-section {
19 | color: #fff;
20 | }
21 |
22 | .hljs-comment,
23 | .hljs-quote,
24 | .hljs-meta {
25 | color: #444;
26 | }
27 |
28 | .hljs-string,
29 | .hljs-symbol,
30 | .hljs-bullet,
31 | .hljs-regexp {
32 | color: #ffcc33;
33 | }
34 |
35 | .hljs-number,
36 | .hljs-addition {
37 | color: #00cc66;
38 | }
39 |
40 | .hljs-built_in,
41 | .hljs-builtin-name,
42 | .hljs-literal,
43 | .hljs-type,
44 | .hljs-template-variable,
45 | .hljs-attribute,
46 | .hljs-link {
47 | color: #32aaee;
48 | }
49 |
50 | .hljs-keyword,
51 | .hljs-selector-tag,
52 | .hljs-name,
53 | .hljs-selector-id,
54 | .hljs-selector-class {
55 | color: #6644aa;
56 | }
57 |
58 | .hljs-title,
59 | .hljs-variable,
60 | .hljs-deletion,
61 | .hljs-template-tag {
62 | color: #bb1166;
63 | }
64 |
65 | .hljs-section,
66 | .hljs-doctag,
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
71 | .hljs-emphasis {
72 | font-style: italic;
73 | }
74 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/ascetic.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Original style from softwaremaniacs.org (c) Ivan Sagalaev
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: white;
12 | color: black;
13 | }
14 |
15 | .hljs-string,
16 | .hljs-variable,
17 | .hljs-template-variable,
18 | .hljs-symbol,
19 | .hljs-bullet,
20 | .hljs-section,
21 | .hljs-addition,
22 | .hljs-attribute,
23 | .hljs-link {
24 | color: #888;
25 | }
26 |
27 | .hljs-comment,
28 | .hljs-quote,
29 | .hljs-meta,
30 | .hljs-deletion {
31 | color: #ccc;
32 | }
33 |
34 | .hljs-keyword,
35 | .hljs-selector-tag,
36 | .hljs-section,
37 | .hljs-name,
38 | .hljs-type,
39 | .hljs-strong {
40 | font-weight: bold;
41 | }
42 |
43 | .hljs-emphasis {
44 | font-style: italic;
45 | }
46 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-cave-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Cave Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Cave Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #7e7887;
9 | }
10 |
11 | /* Atelier-Cave Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-regexp,
16 | .hljs-link,
17 | .hljs-tag,
18 | .hljs-name,
19 | .hljs-selector-id,
20 | .hljs-selector-class {
21 | color: #be4678;
22 | }
23 |
24 | /* Atelier-Cave Orange */
25 | .hljs-number,
26 | .hljs-meta,
27 | .hljs-built_in,
28 | .hljs-builtin-name,
29 | .hljs-literal,
30 | .hljs-type,
31 | .hljs-params {
32 | color: #aa573c;
33 | }
34 |
35 | /* Atelier-Cave Green */
36 | .hljs-string,
37 | .hljs-symbol,
38 | .hljs-bullet {
39 | color: #2a9292;
40 | }
41 |
42 | /* Atelier-Cave Blue */
43 | .hljs-title,
44 | .hljs-section {
45 | color: #576ddb;
46 | }
47 |
48 | /* Atelier-Cave Purple */
49 | .hljs-keyword,
50 | .hljs-selector-tag {
51 | color: #955ae7;
52 | }
53 |
54 | .hljs-deletion,
55 | .hljs-addition {
56 | color: #19171c;
57 | display: inline-block;
58 | width: 100%;
59 | }
60 |
61 | .hljs-deletion {
62 | background-color: #be4678;
63 | }
64 |
65 | .hljs-addition {
66 | background-color: #2a9292;
67 | }
68 |
69 | .hljs {
70 | display: block;
71 | overflow-x: auto;
72 | background: #19171c;
73 | color: #8b8792;
74 | padding: 0.5em;
75 | }
76 |
77 | .hljs-emphasis {
78 | font-style: italic;
79 | }
80 |
81 | .hljs-strong {
82 | font-weight: bold;
83 | }
84 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-cave-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Cave Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Cave Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #655f6d;
9 | }
10 |
11 | /* Atelier-Cave Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-name,
21 | .hljs-selector-id,
22 | .hljs-selector-class {
23 | color: #be4678;
24 | }
25 |
26 | /* Atelier-Cave Orange */
27 | .hljs-number,
28 | .hljs-meta,
29 | .hljs-built_in,
30 | .hljs-builtin-name,
31 | .hljs-literal,
32 | .hljs-type,
33 | .hljs-params {
34 | color: #aa573c;
35 | }
36 |
37 | /* Atelier-Cave Green */
38 | .hljs-string,
39 | .hljs-symbol,
40 | .hljs-bullet {
41 | color: #2a9292;
42 | }
43 |
44 | /* Atelier-Cave Blue */
45 | .hljs-title,
46 | .hljs-section {
47 | color: #576ddb;
48 | }
49 |
50 | /* Atelier-Cave Purple */
51 | .hljs-keyword,
52 | .hljs-selector-tag {
53 | color: #955ae7;
54 | }
55 |
56 | .hljs-deletion,
57 | .hljs-addition {
58 | color: #19171c;
59 | display: inline-block;
60 | width: 100%;
61 | }
62 |
63 | .hljs-deletion {
64 | background-color: #be4678;
65 | }
66 |
67 | .hljs-addition {
68 | background-color: #2a9292;
69 | }
70 |
71 | .hljs {
72 | display: block;
73 | overflow-x: auto;
74 | background: #efecf4;
75 | color: #585260;
76 | padding: 0.5em;
77 | }
78 |
79 | .hljs-emphasis {
80 | font-style: italic;
81 | }
82 |
83 | .hljs-strong {
84 | font-weight: bold;
85 | }
86 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-dune-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Dune Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Dune Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #999580;
9 | }
10 |
11 | /* Atelier-Dune Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #d73737;
23 | }
24 |
25 | /* Atelier-Dune Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #b65611;
34 | }
35 |
36 | /* Atelier-Dune Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #60ac39;
41 | }
42 |
43 | /* Atelier-Dune Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #6684e1;
47 | }
48 |
49 | /* Atelier-Dune Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #b854d4;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #20201d;
59 | color: #a6a28c;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-dune-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Dune Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Dune Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #7d7a68;
9 | }
10 |
11 | /* Atelier-Dune Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #d73737;
23 | }
24 |
25 | /* Atelier-Dune Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #b65611;
34 | }
35 |
36 | /* Atelier-Dune Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #60ac39;
41 | }
42 |
43 | /* Atelier-Dune Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #6684e1;
47 | }
48 |
49 | /* Atelier-Dune Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #b854d4;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #fefbec;
59 | color: #6e6b5e;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-estuary-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Estuary Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/estuary) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Estuary Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #878573;
9 | }
10 |
11 | /* Atelier-Estuary Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #ba6236;
23 | }
24 |
25 | /* Atelier-Estuary Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #ae7313;
34 | }
35 |
36 | /* Atelier-Estuary Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #7d9726;
41 | }
42 |
43 | /* Atelier-Estuary Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #36a166;
47 | }
48 |
49 | /* Atelier-Estuary Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #5f9182;
53 | }
54 |
55 | .hljs-deletion,
56 | .hljs-addition {
57 | color: #22221b;
58 | display: inline-block;
59 | width: 100%;
60 | }
61 |
62 | .hljs-deletion {
63 | background-color: #ba6236;
64 | }
65 |
66 | .hljs-addition {
67 | background-color: #7d9726;
68 | }
69 |
70 | .hljs {
71 | display: block;
72 | overflow-x: auto;
73 | background: #22221b;
74 | color: #929181;
75 | padding: 0.5em;
76 | }
77 |
78 | .hljs-emphasis {
79 | font-style: italic;
80 | }
81 |
82 | .hljs-strong {
83 | font-weight: bold;
84 | }
85 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-estuary-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Estuary Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/estuary) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Estuary Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #6c6b5a;
9 | }
10 |
11 | /* Atelier-Estuary Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #ba6236;
23 | }
24 |
25 | /* Atelier-Estuary Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #ae7313;
34 | }
35 |
36 | /* Atelier-Estuary Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #7d9726;
41 | }
42 |
43 | /* Atelier-Estuary Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #36a166;
47 | }
48 |
49 | /* Atelier-Estuary Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #5f9182;
53 | }
54 |
55 | .hljs-deletion,
56 | .hljs-addition {
57 | color: #22221b;
58 | display: inline-block;
59 | width: 100%;
60 | }
61 |
62 | .hljs-deletion {
63 | background-color: #ba6236;
64 | }
65 |
66 | .hljs-addition {
67 | background-color: #7d9726;
68 | }
69 |
70 | .hljs {
71 | display: block;
72 | overflow-x: auto;
73 | background: #f4f3ec;
74 | color: #5f5e4e;
75 | padding: 0.5em;
76 | }
77 |
78 | .hljs-emphasis {
79 | font-style: italic;
80 | }
81 |
82 | .hljs-strong {
83 | font-weight: bold;
84 | }
85 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-forest-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Forest Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Forest Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #9c9491;
9 | }
10 |
11 | /* Atelier-Forest Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #f22c40;
23 | }
24 |
25 | /* Atelier-Forest Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #df5320;
34 | }
35 |
36 | /* Atelier-Forest Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #7b9726;
41 | }
42 |
43 | /* Atelier-Forest Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #407ee7;
47 | }
48 |
49 | /* Atelier-Forest Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #6666ea;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #1b1918;
59 | color: #a8a19f;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-forest-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Forest Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Forest Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #766e6b;
9 | }
10 |
11 | /* Atelier-Forest Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #f22c40;
23 | }
24 |
25 | /* Atelier-Forest Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #df5320;
34 | }
35 |
36 | /* Atelier-Forest Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #7b9726;
41 | }
42 |
43 | /* Atelier-Forest Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #407ee7;
47 | }
48 |
49 | /* Atelier-Forest Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #6666ea;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #f1efee;
59 | color: #68615e;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-heath-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Heath Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Heath Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #9e8f9e;
9 | }
10 |
11 | /* Atelier-Heath Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #ca402b;
23 | }
24 |
25 | /* Atelier-Heath Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #a65926;
34 | }
35 |
36 | /* Atelier-Heath Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #918b3b;
41 | }
42 |
43 | /* Atelier-Heath Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #516aec;
47 | }
48 |
49 | /* Atelier-Heath Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #7b59c0;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #1b181b;
59 | color: #ab9bab;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-heath-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Heath Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Heath Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #776977;
9 | }
10 |
11 | /* Atelier-Heath Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #ca402b;
23 | }
24 |
25 | /* Atelier-Heath Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #a65926;
34 | }
35 |
36 | /* Atelier-Heath Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #918b3b;
41 | }
42 |
43 | /* Atelier-Heath Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #516aec;
47 | }
48 |
49 | /* Atelier-Heath Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #7b59c0;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #f7f3f7;
59 | color: #695d69;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-lakeside-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Lakeside Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Lakeside Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #7195a8;
9 | }
10 |
11 | /* Atelier-Lakeside Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #d22d72;
23 | }
24 |
25 | /* Atelier-Lakeside Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #935c25;
34 | }
35 |
36 | /* Atelier-Lakeside Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #568c3b;
41 | }
42 |
43 | /* Atelier-Lakeside Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #257fad;
47 | }
48 |
49 | /* Atelier-Lakeside Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #6b6bb8;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #161b1d;
59 | color: #7ea2b4;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-lakeside-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Lakeside Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Lakeside Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #5a7b8c;
9 | }
10 |
11 | /* Atelier-Lakeside Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #d22d72;
23 | }
24 |
25 | /* Atelier-Lakeside Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #935c25;
34 | }
35 |
36 | /* Atelier-Lakeside Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #568c3b;
41 | }
42 |
43 | /* Atelier-Lakeside Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #257fad;
47 | }
48 |
49 | /* Atelier-Lakeside Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #6b6bb8;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #ebf8ff;
59 | color: #516d7b;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-plateau-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Plateau Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/plateau) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Plateau Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #7e7777;
9 | }
10 |
11 | /* Atelier-Plateau Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #ca4949;
23 | }
24 |
25 | /* Atelier-Plateau Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #b45a3c;
34 | }
35 |
36 | /* Atelier-Plateau Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #4b8b8b;
41 | }
42 |
43 | /* Atelier-Plateau Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #7272ca;
47 | }
48 |
49 | /* Atelier-Plateau Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #8464c4;
53 | }
54 |
55 | .hljs-deletion,
56 | .hljs-addition {
57 | color: #1b1818;
58 | display: inline-block;
59 | width: 100%;
60 | }
61 |
62 | .hljs-deletion {
63 | background-color: #ca4949;
64 | }
65 |
66 | .hljs-addition {
67 | background-color: #4b8b8b;
68 | }
69 |
70 | .hljs {
71 | display: block;
72 | overflow-x: auto;
73 | background: #1b1818;
74 | color: #8a8585;
75 | padding: 0.5em;
76 | }
77 |
78 | .hljs-emphasis {
79 | font-style: italic;
80 | }
81 |
82 | .hljs-strong {
83 | font-weight: bold;
84 | }
85 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-plateau-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Plateau Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/plateau) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Plateau Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #655d5d;
9 | }
10 |
11 | /* Atelier-Plateau Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #ca4949;
23 | }
24 |
25 | /* Atelier-Plateau Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #b45a3c;
34 | }
35 |
36 | /* Atelier-Plateau Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #4b8b8b;
41 | }
42 |
43 | /* Atelier-Plateau Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #7272ca;
47 | }
48 |
49 | /* Atelier-Plateau Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #8464c4;
53 | }
54 |
55 | .hljs-deletion,
56 | .hljs-addition {
57 | color: #1b1818;
58 | display: inline-block;
59 | width: 100%;
60 | }
61 |
62 | .hljs-deletion {
63 | background-color: #ca4949;
64 | }
65 |
66 | .hljs-addition {
67 | background-color: #4b8b8b;
68 | }
69 |
70 | .hljs {
71 | display: block;
72 | overflow-x: auto;
73 | background: #f4ecec;
74 | color: #585050;
75 | padding: 0.5em;
76 | }
77 |
78 | .hljs-emphasis {
79 | font-style: italic;
80 | }
81 |
82 | .hljs-strong {
83 | font-weight: bold;
84 | }
85 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-savanna-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Savanna Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/savanna) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Savanna Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #78877d;
9 | }
10 |
11 | /* Atelier-Savanna Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #b16139;
23 | }
24 |
25 | /* Atelier-Savanna Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #9f713c;
34 | }
35 |
36 | /* Atelier-Savanna Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #489963;
41 | }
42 |
43 | /* Atelier-Savanna Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #478c90;
47 | }
48 |
49 | /* Atelier-Savanna Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #55859b;
53 | }
54 |
55 | .hljs-deletion,
56 | .hljs-addition {
57 | color: #171c19;
58 | display: inline-block;
59 | width: 100%;
60 | }
61 |
62 | .hljs-deletion {
63 | background-color: #b16139;
64 | }
65 |
66 | .hljs-addition {
67 | background-color: #489963;
68 | }
69 |
70 | .hljs {
71 | display: block;
72 | overflow-x: auto;
73 | background: #171c19;
74 | color: #87928a;
75 | padding: 0.5em;
76 | }
77 |
78 | .hljs-emphasis {
79 | font-style: italic;
80 | }
81 |
82 | .hljs-strong {
83 | font-weight: bold;
84 | }
85 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-savanna-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Savanna Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/savanna) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Savanna Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #5f6d64;
9 | }
10 |
11 | /* Atelier-Savanna Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #b16139;
23 | }
24 |
25 | /* Atelier-Savanna Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #9f713c;
34 | }
35 |
36 | /* Atelier-Savanna Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #489963;
41 | }
42 |
43 | /* Atelier-Savanna Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #478c90;
47 | }
48 |
49 | /* Atelier-Savanna Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #55859b;
53 | }
54 |
55 | .hljs-deletion,
56 | .hljs-addition {
57 | color: #171c19;
58 | display: inline-block;
59 | width: 100%;
60 | }
61 |
62 | .hljs-deletion {
63 | background-color: #b16139;
64 | }
65 |
66 | .hljs-addition {
67 | background-color: #489963;
68 | }
69 |
70 | .hljs {
71 | display: block;
72 | overflow-x: auto;
73 | background: #ecf4ee;
74 | color: #526057;
75 | padding: 0.5em;
76 | }
77 |
78 | .hljs-emphasis {
79 | font-style: italic;
80 | }
81 |
82 | .hljs-strong {
83 | font-weight: bold;
84 | }
85 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-seaside-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Seaside Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Seaside Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #809980;
9 | }
10 |
11 | /* Atelier-Seaside Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #e6193c;
23 | }
24 |
25 | /* Atelier-Seaside Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #87711d;
34 | }
35 |
36 | /* Atelier-Seaside Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #29a329;
41 | }
42 |
43 | /* Atelier-Seaside Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #3d62f5;
47 | }
48 |
49 | /* Atelier-Seaside Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #ad2bee;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #131513;
59 | color: #8ca68c;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-seaside-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Seaside Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Seaside Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #687d68;
9 | }
10 |
11 | /* Atelier-Seaside Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #e6193c;
23 | }
24 |
25 | /* Atelier-Seaside Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #87711d;
34 | }
35 |
36 | /* Atelier-Seaside Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #29a329;
41 | }
42 |
43 | /* Atelier-Seaside Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #3d62f5;
47 | }
48 |
49 | /* Atelier-Seaside Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #ad2bee;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #f4fbf4;
59 | color: #5e6e5e;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-sulphurpool-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Sulphurpool Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/sulphurpool) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Sulphurpool Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #898ea4;
9 | }
10 |
11 | /* Atelier-Sulphurpool Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #c94922;
23 | }
24 |
25 | /* Atelier-Sulphurpool Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #c76b29;
34 | }
35 |
36 | /* Atelier-Sulphurpool Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #ac9739;
41 | }
42 |
43 | /* Atelier-Sulphurpool Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #3d8fd1;
47 | }
48 |
49 | /* Atelier-Sulphurpool Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #6679cc;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #202746;
59 | color: #979db4;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atelier-sulphurpool-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Sulphurpool Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/sulphurpool) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Sulphurpool Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #6b7394;
9 | }
10 |
11 | /* Atelier-Sulphurpool Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #c94922;
23 | }
24 |
25 | /* Atelier-Sulphurpool Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #c76b29;
34 | }
35 |
36 | /* Atelier-Sulphurpool Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #ac9739;
41 | }
42 |
43 | /* Atelier-Sulphurpool Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #3d8fd1;
47 | }
48 |
49 | /* Atelier-Sulphurpool Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #6679cc;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #f5f7ff;
59 | color: #5e6687;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atom-one-dark.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Atom One Dark by Daniel Gamage
4 | Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax
5 |
6 | base: #282c34
7 | mono-1: #abb2bf
8 | mono-2: #818896
9 | mono-3: #5c6370
10 | hue-1: #56b6c2
11 | hue-2: #61aeee
12 | hue-3: #c678dd
13 | hue-4: #98c379
14 | hue-5: #e06c75
15 | hue-5-2: #be5046
16 | hue-6: #d19a66
17 | hue-6-2: #e6c07b
18 |
19 | */
20 |
21 | .hljs {
22 | display: block;
23 | overflow-x: auto;
24 | padding: 0.5em;
25 | color: #abb2bf;
26 | background: #282c34;
27 | }
28 |
29 | .hljs-comment,
30 | .hljs-quote {
31 | color: #5c6370;
32 | font-style: italic;
33 | }
34 |
35 | .hljs-doctag,
36 | .hljs-keyword,
37 | .hljs-formula {
38 | color: #c678dd;
39 | }
40 |
41 | .hljs-section,
42 | .hljs-name,
43 | .hljs-selector-tag,
44 | .hljs-deletion,
45 | .hljs-subst {
46 | color: #e06c75;
47 | }
48 |
49 | .hljs-literal {
50 | color: #56b6c2;
51 | }
52 |
53 | .hljs-string,
54 | .hljs-regexp,
55 | .hljs-addition,
56 | .hljs-attribute,
57 | .hljs-meta-string {
58 | color: #98c379;
59 | }
60 |
61 | .hljs-built_in,
62 | .hljs-class .hljs-title {
63 | color: #e6c07b;
64 | }
65 |
66 | .hljs-attr,
67 | .hljs-variable,
68 | .hljs-template-variable,
69 | .hljs-type,
70 | .hljs-selector-class,
71 | .hljs-selector-attr,
72 | .hljs-selector-pseudo,
73 | .hljs-number {
74 | color: #d19a66;
75 | }
76 |
77 | .hljs-symbol,
78 | .hljs-bullet,
79 | .hljs-link,
80 | .hljs-meta,
81 | .hljs-selector-id,
82 | .hljs-title {
83 | color: #61aeee;
84 | }
85 |
86 | .hljs-emphasis {
87 | font-style: italic;
88 | }
89 |
90 | .hljs-strong {
91 | font-weight: bold;
92 | }
93 |
94 | .hljs-link {
95 | text-decoration: underline;
96 | }
97 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/atom-one-light.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Atom One Light by Daniel Gamage
4 | Original One Light Syntax theme from https://github.com/atom/one-light-syntax
5 |
6 | base: #fafafa
7 | mono-1: #383a42
8 | mono-2: #686b77
9 | mono-3: #a0a1a7
10 | hue-1: #0184bb
11 | hue-2: #4078f2
12 | hue-3: #a626a4
13 | hue-4: #50a14f
14 | hue-5: #e45649
15 | hue-5-2: #c91243
16 | hue-6: #986801
17 | hue-6-2: #c18401
18 |
19 | */
20 |
21 | .hljs {
22 | display: block;
23 | overflow-x: auto;
24 | padding: 0.5em;
25 | color: #383a42;
26 | background: #fafafa;
27 | }
28 |
29 | .hljs-comment,
30 | .hljs-quote {
31 | color: #a0a1a7;
32 | font-style: italic;
33 | }
34 |
35 | .hljs-doctag,
36 | .hljs-keyword,
37 | .hljs-formula {
38 | color: #a626a4;
39 | }
40 |
41 | .hljs-section,
42 | .hljs-name,
43 | .hljs-selector-tag,
44 | .hljs-deletion,
45 | .hljs-subst {
46 | color: #e45649;
47 | }
48 |
49 | .hljs-literal {
50 | color: #0184bb;
51 | }
52 |
53 | .hljs-string,
54 | .hljs-regexp,
55 | .hljs-addition,
56 | .hljs-attribute,
57 | .hljs-meta-string {
58 | color: #50a14f;
59 | }
60 |
61 | .hljs-built_in,
62 | .hljs-class .hljs-title {
63 | color: #c18401;
64 | }
65 |
66 | .hljs-attr,
67 | .hljs-variable,
68 | .hljs-template-variable,
69 | .hljs-type,
70 | .hljs-selector-class,
71 | .hljs-selector-attr,
72 | .hljs-selector-pseudo,
73 | .hljs-number {
74 | color: #986801;
75 | }
76 |
77 | .hljs-symbol,
78 | .hljs-bullet,
79 | .hljs-link,
80 | .hljs-meta,
81 | .hljs-selector-id,
82 | .hljs-title {
83 | color: #4078f2;
84 | }
85 |
86 | .hljs-emphasis {
87 | font-style: italic;
88 | }
89 |
90 | .hljs-strong {
91 | font-weight: bold;
92 | }
93 |
94 | .hljs-link {
95 | text-decoration: underline;
96 | }
97 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/brown-paper.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Brown Paper style from goldblog.com.ua (c) Zaripov Yura
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background:#b7a68e url(./brown-papersq.png);
12 | }
13 |
14 | .hljs-keyword,
15 | .hljs-selector-tag,
16 | .hljs-literal {
17 | color:#005599;
18 | font-weight:bold;
19 | }
20 |
21 | .hljs,
22 | .hljs-subst {
23 | color: #363c69;
24 | }
25 |
26 | .hljs-string,
27 | .hljs-title,
28 | .hljs-section,
29 | .hljs-type,
30 | .hljs-attribute,
31 | .hljs-symbol,
32 | .hljs-bullet,
33 | .hljs-built_in,
34 | .hljs-addition,
35 | .hljs-variable,
36 | .hljs-template-tag,
37 | .hljs-template-variable,
38 | .hljs-link,
39 | .hljs-name {
40 | color: #2c009f;
41 | }
42 |
43 | .hljs-comment,
44 | .hljs-quote,
45 | .hljs-meta,
46 | .hljs-deletion {
47 | color: #802022;
48 | }
49 |
50 | .hljs-keyword,
51 | .hljs-selector-tag,
52 | .hljs-literal,
53 | .hljs-doctag,
54 | .hljs-title,
55 | .hljs-section,
56 | .hljs-type,
57 | .hljs-name,
58 | .hljs-strong {
59 | font-weight: bold;
60 | }
61 |
62 | .hljs-emphasis {
63 | font-style: italic;
64 | }
65 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/brown-papersq.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tulz-app/frontroute/6f13ad036ae6dfb1c5b557e392a9bfda2c2654fe/website/src/main/public/stylesheets/highlightjs/brown-papersq.png
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/codepen-embed.css:
--------------------------------------------------------------------------------
1 | /*
2 | codepen.io Embed Theme
3 | Author: Justin Perry
4 | Original theme - https://github.com/chriskempson/tomorrow-theme
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #222;
12 | color: #fff;
13 | }
14 |
15 | .hljs-comment,
16 | .hljs-quote {
17 | color: #777;
18 | }
19 |
20 | .hljs-variable,
21 | .hljs-template-variable,
22 | .hljs-tag,
23 | .hljs-regexp,
24 | .hljs-meta,
25 | .hljs-number,
26 | .hljs-built_in,
27 | .hljs-builtin-name,
28 | .hljs-literal,
29 | .hljs-params,
30 | .hljs-symbol,
31 | .hljs-bullet,
32 | .hljs-link,
33 | .hljs-deletion {
34 | color: #ab875d;
35 | }
36 |
37 | .hljs-section,
38 | .hljs-title,
39 | .hljs-name,
40 | .hljs-selector-id,
41 | .hljs-selector-class,
42 | .hljs-type,
43 | .hljs-attribute {
44 | color: #9b869b;
45 | }
46 |
47 | .hljs-string,
48 | .hljs-keyword,
49 | .hljs-selector-tag,
50 | .hljs-addition {
51 | color: #8f9c6c;
52 | }
53 |
54 | .hljs-emphasis {
55 | font-style: italic;
56 | }
57 |
58 | .hljs-strong {
59 | font-weight: bold;
60 | }
61 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/color-brewer.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Colorbrewer theme
4 | Original: https://github.com/mbostock/colorbrewer-theme (c) Mike Bostock
5 | Ported by Fabrício Tavares de Oliveira
6 |
7 | */
8 |
9 | .hljs {
10 | display: block;
11 | overflow-x: auto;
12 | padding: 0.5em;
13 | background: #fff;
14 | }
15 |
16 | .hljs,
17 | .hljs-subst {
18 | color: #000;
19 | }
20 |
21 | .hljs-string,
22 | .hljs-meta,
23 | .hljs-symbol,
24 | .hljs-template-tag,
25 | .hljs-template-variable,
26 | .hljs-addition {
27 | color: #756bb1;
28 | }
29 |
30 | .hljs-comment,
31 | .hljs-quote {
32 | color: #636363;
33 | }
34 |
35 | .hljs-number,
36 | .hljs-regexp,
37 | .hljs-literal,
38 | .hljs-bullet,
39 | .hljs-link {
40 | color: #31a354;
41 | }
42 |
43 | .hljs-deletion,
44 | .hljs-variable {
45 | color: #88f;
46 | }
47 |
48 |
49 |
50 | .hljs-keyword,
51 | .hljs-selector-tag,
52 | .hljs-title,
53 | .hljs-section,
54 | .hljs-built_in,
55 | .hljs-doctag,
56 | .hljs-type,
57 | .hljs-tag,
58 | .hljs-name,
59 | .hljs-selector-id,
60 | .hljs-selector-class,
61 | .hljs-strong {
62 | color: #3182bd;
63 | }
64 |
65 | .hljs-emphasis {
66 | font-style: italic;
67 | }
68 |
69 | .hljs-attribute {
70 | color: #e6550d;
71 | }
72 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/darcula.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Darcula color scheme from the JetBrains family of IDEs
4 |
5 | */
6 |
7 |
8 | .hljs {
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | background: #2b2b2b;
13 | color: #bababa;
14 | }
15 |
16 | .hljs-strong,
17 | .hljs-emphasis {
18 | color: #a8a8a2;
19 | }
20 |
21 | .hljs-bullet,
22 | .hljs-quote,
23 | .hljs-link,
24 | .hljs-number,
25 | .hljs-regexp,
26 | .hljs-literal {
27 | color: #6896ba;
28 | }
29 |
30 | .hljs-code,
31 | .hljs-selector-class {
32 | color: #a6e22e;
33 | }
34 |
35 | .hljs-emphasis {
36 | font-style: italic;
37 | }
38 |
39 | .hljs-keyword,
40 | .hljs-selector-tag,
41 | .hljs-section,
42 | .hljs-attribute,
43 | .hljs-name,
44 | .hljs-variable {
45 | color: #cb7832;
46 | }
47 |
48 | .hljs-params {
49 | color: #b9b9b9;
50 | }
51 |
52 | .hljs-string {
53 | color: #6a8759;
54 | }
55 |
56 | .hljs-subst,
57 | .hljs-type,
58 | .hljs-built_in,
59 | .hljs-builtin-name,
60 | .hljs-symbol,
61 | .hljs-selector-id,
62 | .hljs-selector-attr,
63 | .hljs-selector-pseudo,
64 | .hljs-template-tag,
65 | .hljs-template-variable,
66 | .hljs-addition {
67 | color: #e0c46c;
68 | }
69 |
70 | .hljs-comment,
71 | .hljs-deletion,
72 | .hljs-meta {
73 | color: #7f7f7f;
74 | }
75 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/dark.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Dark style from softwaremaniacs.org (c) Ivan Sagalaev
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #444;
12 | }
13 |
14 | .hljs-keyword,
15 | .hljs-selector-tag,
16 | .hljs-literal,
17 | .hljs-section,
18 | .hljs-link {
19 | color: white;
20 | }
21 |
22 | .hljs,
23 | .hljs-subst {
24 | color: #ddd;
25 | }
26 |
27 | .hljs-string,
28 | .hljs-title,
29 | .hljs-name,
30 | .hljs-type,
31 | .hljs-attribute,
32 | .hljs-symbol,
33 | .hljs-bullet,
34 | .hljs-built_in,
35 | .hljs-addition,
36 | .hljs-variable,
37 | .hljs-template-tag,
38 | .hljs-template-variable {
39 | color: #d88;
40 | }
41 |
42 | .hljs-comment,
43 | .hljs-quote,
44 | .hljs-deletion,
45 | .hljs-meta {
46 | color: #777;
47 | }
48 |
49 | .hljs-keyword,
50 | .hljs-selector-tag,
51 | .hljs-literal,
52 | .hljs-title,
53 | .hljs-section,
54 | .hljs-doctag,
55 | .hljs-type,
56 | .hljs-name,
57 | .hljs-strong {
58 | font-weight: bold;
59 | }
60 |
61 | .hljs-emphasis {
62 | font-style: italic;
63 | }
64 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/default.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Original highlight.js style (c) Ivan Sagalaev
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #F0F0F0;
12 | }
13 |
14 |
15 | /* Base color: saturation 0; */
16 |
17 | .hljs,
18 | .hljs-subst {
19 | color: #444;
20 | }
21 |
22 | .hljs-comment {
23 | color: #888888;
24 | }
25 |
26 | .hljs-keyword,
27 | .hljs-attribute,
28 | .hljs-selector-tag,
29 | .hljs-meta-keyword,
30 | .hljs-doctag,
31 | .hljs-name {
32 | font-weight: bold;
33 | }
34 |
35 |
36 | /* User color: hue: 0 */
37 |
38 | .hljs-type,
39 | .hljs-string,
40 | .hljs-number,
41 | .hljs-selector-id,
42 | .hljs-selector-class,
43 | .hljs-quote,
44 | .hljs-template-tag,
45 | .hljs-deletion {
46 | color: #880000;
47 | }
48 |
49 | .hljs-title,
50 | .hljs-section {
51 | color: #880000;
52 | font-weight: bold;
53 | }
54 |
55 | .hljs-regexp,
56 | .hljs-symbol,
57 | .hljs-variable,
58 | .hljs-template-variable,
59 | .hljs-link,
60 | .hljs-selector-attr,
61 | .hljs-selector-pseudo {
62 | color: #BC6060;
63 | }
64 |
65 |
66 | /* Language color: hue: 90; */
67 |
68 | .hljs-literal {
69 | color: #78A960;
70 | }
71 |
72 | .hljs-built_in,
73 | .hljs-bullet,
74 | .hljs-code,
75 | .hljs-addition {
76 | color: #397300;
77 | }
78 |
79 |
80 | /* Meta color: hue: 200 */
81 |
82 | .hljs-meta {
83 | color: #1f7199;
84 | }
85 |
86 | .hljs-meta-string {
87 | color: #4d99bf;
88 | }
89 |
90 |
91 | /* Misc effects */
92 |
93 | .hljs-emphasis {
94 | font-style: italic;
95 | }
96 |
97 | .hljs-strong {
98 | font-weight: bold;
99 | }
100 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/docco.css:
--------------------------------------------------------------------------------
1 | /*
2 | Docco style used in http://jashkenas.github.com/docco/ converted by Simon Madine (@thingsinjars)
3 | */
4 |
5 | .hljs {
6 | display: block;
7 | overflow-x: auto;
8 | padding: 0.5em;
9 | color: #000;
10 | background: #f8f8ff;
11 | }
12 |
13 | .hljs-comment,
14 | .hljs-quote {
15 | color: #408080;
16 | font-style: italic;
17 | }
18 |
19 | .hljs-keyword,
20 | .hljs-selector-tag,
21 | .hljs-literal,
22 | .hljs-subst {
23 | color: #954121;
24 | }
25 |
26 | .hljs-number {
27 | color: #40a070;
28 | }
29 |
30 | .hljs-string,
31 | .hljs-doctag {
32 | color: #219161;
33 | }
34 |
35 | .hljs-selector-id,
36 | .hljs-selector-class,
37 | .hljs-section,
38 | .hljs-type {
39 | color: #19469d;
40 | }
41 |
42 | .hljs-params {
43 | color: #00f;
44 | }
45 |
46 | .hljs-title {
47 | color: #458;
48 | font-weight: bold;
49 | }
50 |
51 | .hljs-tag,
52 | .hljs-name,
53 | .hljs-attribute {
54 | color: #000080;
55 | font-weight: normal;
56 | }
57 |
58 | .hljs-variable,
59 | .hljs-template-variable {
60 | color: #008080;
61 | }
62 |
63 | .hljs-regexp,
64 | .hljs-link {
65 | color: #b68;
66 | }
67 |
68 | .hljs-symbol,
69 | .hljs-bullet {
70 | color: #990073;
71 | }
72 |
73 | .hljs-built_in,
74 | .hljs-builtin-name {
75 | color: #0086b3;
76 | }
77 |
78 | .hljs-meta {
79 | color: #999;
80 | font-weight: bold;
81 | }
82 |
83 | .hljs-deletion {
84 | background: #fdd;
85 | }
86 |
87 | .hljs-addition {
88 | background: #dfd;
89 | }
90 |
91 | .hljs-emphasis {
92 | font-style: italic;
93 | }
94 |
95 | .hljs-strong {
96 | font-weight: bold;
97 | }
98 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/dracula.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Dracula Theme v1.2.0
4 |
5 | https://github.com/zenorocha/dracula-theme
6 |
7 | Copyright 2015, All rights reserved
8 |
9 | Code licensed under the MIT license
10 | http://zenorocha.mit-license.org
11 |
12 | @author Éverton Ribeiro
13 | @author Zeno Rocha
14 |
15 | */
16 |
17 | .hljs {
18 | display: block;
19 | overflow-x: auto;
20 | padding: 0.5em;
21 | background: #282a36;
22 | }
23 |
24 | .hljs-keyword,
25 | .hljs-selector-tag,
26 | .hljs-literal,
27 | .hljs-section,
28 | .hljs-link {
29 | color: #8be9fd;
30 | }
31 |
32 | .hljs-function .hljs-keyword {
33 | color: #ff79c6;
34 | }
35 |
36 | .hljs,
37 | .hljs-subst {
38 | color: #f8f8f2;
39 | }
40 |
41 | .hljs-string,
42 | .hljs-title,
43 | .hljs-name,
44 | .hljs-type,
45 | .hljs-attribute,
46 | .hljs-symbol,
47 | .hljs-bullet,
48 | .hljs-addition,
49 | .hljs-variable,
50 | .hljs-template-tag,
51 | .hljs-template-variable {
52 | color: #f1fa8c;
53 | }
54 |
55 | .hljs-comment,
56 | .hljs-quote,
57 | .hljs-deletion,
58 | .hljs-meta {
59 | color: #6272a4;
60 | }
61 |
62 | .hljs-keyword,
63 | .hljs-selector-tag,
64 | .hljs-literal,
65 | .hljs-title,
66 | .hljs-section,
67 | .hljs-doctag,
68 | .hljs-type,
69 | .hljs-name,
70 | .hljs-strong {
71 | font-weight: bold;
72 | }
73 |
74 | .hljs-emphasis {
75 | font-style: italic;
76 | }
77 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/far.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | FAR Style (c) MajestiC
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #000080;
12 | }
13 |
14 | .hljs,
15 | .hljs-subst {
16 | color: #0ff;
17 | }
18 |
19 | .hljs-string,
20 | .hljs-attribute,
21 | .hljs-symbol,
22 | .hljs-bullet,
23 | .hljs-built_in,
24 | .hljs-builtin-name,
25 | .hljs-template-tag,
26 | .hljs-template-variable,
27 | .hljs-addition {
28 | color: #ff0;
29 | }
30 |
31 | .hljs-keyword,
32 | .hljs-selector-tag,
33 | .hljs-section,
34 | .hljs-type,
35 | .hljs-name,
36 | .hljs-selector-id,
37 | .hljs-selector-class,
38 | .hljs-variable {
39 | color: #fff;
40 | }
41 |
42 | .hljs-comment,
43 | .hljs-quote,
44 | .hljs-doctag,
45 | .hljs-deletion {
46 | color: #888;
47 | }
48 |
49 | .hljs-number,
50 | .hljs-regexp,
51 | .hljs-literal,
52 | .hljs-link {
53 | color: #0f0;
54 | }
55 |
56 | .hljs-meta {
57 | color: #008080;
58 | }
59 |
60 | .hljs-keyword,
61 | .hljs-selector-tag,
62 | .hljs-title,
63 | .hljs-section,
64 | .hljs-name,
65 | .hljs-strong {
66 | font-weight: bold;
67 | }
68 |
69 | .hljs-emphasis {
70 | font-style: italic;
71 | }
72 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/foundation.css:
--------------------------------------------------------------------------------
1 | /*
2 | Description: Foundation 4 docs style for highlight.js
3 | Author: Dan Allen
4 | Website: http://foundation.zurb.com/docs/
5 | Version: 1.0
6 | Date: 2013-04-02
7 | */
8 |
9 | .hljs {
10 | display: block;
11 | overflow-x: auto;
12 | padding: 0.5em;
13 | background: #eee;
14 | color: black;
15 | }
16 |
17 | .hljs-link,
18 | .hljs-emphasis,
19 | .hljs-attribute,
20 | .hljs-addition {
21 | color: #070;
22 | }
23 |
24 | .hljs-emphasis {
25 | font-style: italic;
26 | }
27 |
28 | .hljs-strong,
29 | .hljs-string,
30 | .hljs-deletion {
31 | color: #d14;
32 | }
33 |
34 | .hljs-strong {
35 | font-weight: bold;
36 | }
37 |
38 | .hljs-quote,
39 | .hljs-comment {
40 | color: #998;
41 | font-style: italic;
42 | }
43 |
44 | .hljs-section,
45 | .hljs-title {
46 | color: #900;
47 | }
48 |
49 | .hljs-class .hljs-title,
50 | .hljs-type {
51 | color: #458;
52 | }
53 |
54 | .hljs-variable,
55 | .hljs-template-variable {
56 | color: #336699;
57 | }
58 |
59 | .hljs-bullet {
60 | color: #997700;
61 | }
62 |
63 | .hljs-meta {
64 | color: #3344bb;
65 | }
66 |
67 | .hljs-code,
68 | .hljs-number,
69 | .hljs-literal,
70 | .hljs-keyword,
71 | .hljs-selector-tag {
72 | color: #099;
73 | }
74 |
75 | .hljs-regexp {
76 | background-color: #fff0ff;
77 | color: #880088;
78 | }
79 |
80 | .hljs-symbol {
81 | color: #990073;
82 | }
83 |
84 | .hljs-tag,
85 | .hljs-name,
86 | .hljs-selector-id,
87 | .hljs-selector-class {
88 | color: #007700;
89 | }
90 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/github-gist.css:
--------------------------------------------------------------------------------
1 | /**
2 | * GitHub Gist Theme
3 | * Author : Anthony Attard - https://github.com/AnthonyAttard
4 | * Author : Louis Barranqueiro - https://github.com/LouisBarranqueiro
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | background: white;
10 | padding: 0.5em;
11 | color: #333333;
12 | overflow-x: auto;
13 | }
14 |
15 | .hljs-comment,
16 | .hljs-meta {
17 | color: #969896;
18 | }
19 |
20 | .hljs-variable,
21 | .hljs-template-variable,
22 | .hljs-strong,
23 | .hljs-emphasis,
24 | .hljs-quote {
25 | color: #df5000;
26 | }
27 |
28 | .hljs-keyword,
29 | .hljs-selector-tag,
30 | .hljs-type {
31 | color: #d73a49;
32 | }
33 |
34 | .hljs-literal,
35 | .hljs-symbol,
36 | .hljs-bullet,
37 | .hljs-attribute {
38 | color: #0086b3;
39 | }
40 |
41 | .hljs-section,
42 | .hljs-name {
43 | color: #63a35c;
44 | }
45 |
46 | .hljs-tag {
47 | color: #333333;
48 | }
49 |
50 | .hljs-title,
51 | .hljs-attr,
52 | .hljs-selector-id,
53 | .hljs-selector-class,
54 | .hljs-selector-attr,
55 | .hljs-selector-pseudo {
56 | color: #6f42c1;
57 | }
58 |
59 | .hljs-addition {
60 | color: #55a532;
61 | background-color: #eaffea;
62 | }
63 |
64 | .hljs-deletion {
65 | color: #bd2c00;
66 | background-color: #ffecec;
67 | }
68 |
69 | .hljs-link {
70 | text-decoration: underline;
71 | }
72 |
73 | .hljs-number {
74 | color: #005cc5;
75 | }
76 |
77 | .hljs-string {
78 | color: #032f62;
79 | }
80 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/github.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | github.com style (c) Vasily Polovnyov
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | color: #333;
12 | background: #f8f8f8;
13 | }
14 |
15 | .hljs-comment,
16 | .hljs-quote {
17 | color: #998;
18 | font-style: italic;
19 | }
20 |
21 | .hljs-keyword,
22 | .hljs-selector-tag,
23 | .hljs-subst {
24 | color: #333;
25 | font-weight: bold;
26 | }
27 |
28 | .hljs-number,
29 | .hljs-literal,
30 | .hljs-variable,
31 | .hljs-template-variable,
32 | .hljs-tag .hljs-attr {
33 | color: #008080;
34 | }
35 |
36 | .hljs-string,
37 | .hljs-doctag {
38 | color: #d14;
39 | }
40 |
41 | .hljs-title,
42 | .hljs-section,
43 | .hljs-selector-id {
44 | color: #900;
45 | font-weight: bold;
46 | }
47 |
48 | .hljs-subst {
49 | font-weight: normal;
50 | }
51 |
52 | .hljs-type,
53 | .hljs-class .hljs-title {
54 | color: #458;
55 | font-weight: bold;
56 | }
57 |
58 | .hljs-tag,
59 | .hljs-name,
60 | .hljs-attribute {
61 | color: #000080;
62 | font-weight: normal;
63 | }
64 |
65 | .hljs-regexp,
66 | .hljs-link {
67 | color: #009926;
68 | }
69 |
70 | .hljs-symbol,
71 | .hljs-bullet {
72 | color: #990073;
73 | }
74 |
75 | .hljs-built_in,
76 | .hljs-builtin-name {
77 | color: #0086b3;
78 | }
79 |
80 | .hljs-meta {
81 | color: #999;
82 | font-weight: bold;
83 | }
84 |
85 | .hljs-deletion {
86 | background: #fdd;
87 | }
88 |
89 | .hljs-addition {
90 | background: #dfd;
91 | }
92 |
93 | .hljs-emphasis {
94 | font-style: italic;
95 | }
96 |
97 | .hljs-strong {
98 | font-weight: bold;
99 | }
100 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/gml.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | GML Theme - Meseta
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #222222;
12 | color: #C0C0C0;
13 | }
14 |
15 | .hljs-keyword {
16 | color: #FFB871;
17 | font-weight: bold;
18 | }
19 |
20 | .hljs-built_in {
21 | color: #FFB871;
22 | }
23 |
24 | .hljs-literal {
25 | color: #FF8080;
26 | }
27 |
28 | .hljs-symbol {
29 | color: #58E55A;
30 | }
31 |
32 | .hljs-comment {
33 | color: #5B995B;
34 | }
35 |
36 | .hljs-string {
37 | color: #FFFF00;
38 | }
39 |
40 | .hljs-number {
41 | color: #FF8080;
42 | }
43 |
44 | .hljs-attribute,
45 | .hljs-selector-tag,
46 | .hljs-doctag,
47 | .hljs-name,
48 | .hljs-bullet,
49 | .hljs-code,
50 | .hljs-addition,
51 | .hljs-regexp,
52 | .hljs-variable,
53 | .hljs-template-variable,
54 | .hljs-link,
55 | .hljs-selector-attr,
56 | .hljs-selector-pseudo,
57 | .hljs-type,
58 | .hljs-selector-id,
59 | .hljs-selector-class,
60 | .hljs-quote,
61 | .hljs-template-tag,
62 | .hljs-deletion,
63 | .hljs-title,
64 | .hljs-section,
65 | .hljs-function,
66 | .hljs-meta-keyword,
67 | .hljs-meta,
68 | .hljs-subst {
69 | color: #C0C0C0;
70 | }
71 |
72 | .hljs-emphasis {
73 | font-style: italic;
74 | }
75 |
76 | .hljs-strong {
77 | font-weight: bold;
78 | }
79 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/googlecode.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Google Code style (c) Aahan Krish
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: white;
12 | color: black;
13 | }
14 |
15 | .hljs-comment,
16 | .hljs-quote {
17 | color: #800;
18 | }
19 |
20 | .hljs-keyword,
21 | .hljs-selector-tag,
22 | .hljs-section,
23 | .hljs-title,
24 | .hljs-name {
25 | color: #008;
26 | }
27 |
28 | .hljs-variable,
29 | .hljs-template-variable {
30 | color: #660;
31 | }
32 |
33 | .hljs-string,
34 | .hljs-selector-attr,
35 | .hljs-selector-pseudo,
36 | .hljs-regexp {
37 | color: #080;
38 | }
39 |
40 | .hljs-literal,
41 | .hljs-symbol,
42 | .hljs-bullet,
43 | .hljs-meta,
44 | .hljs-number,
45 | .hljs-link {
46 | color: #066;
47 | }
48 |
49 | .hljs-title,
50 | .hljs-doctag,
51 | .hljs-type,
52 | .hljs-attr,
53 | .hljs-built_in,
54 | .hljs-builtin-name,
55 | .hljs-params {
56 | color: #606;
57 | }
58 |
59 | .hljs-attribute,
60 | .hljs-subst {
61 | color: #000;
62 | }
63 |
64 | .hljs-formula {
65 | background-color: #eee;
66 | font-style: italic;
67 | }
68 |
69 | .hljs-selector-id,
70 | .hljs-selector-class {
71 | color: #9B703F
72 | }
73 |
74 | .hljs-addition {
75 | background-color: #baeeba;
76 | }
77 |
78 | .hljs-deletion {
79 | background-color: #ffc8bd;
80 | }
81 |
82 | .hljs-doctag,
83 | .hljs-strong {
84 | font-weight: bold;
85 | }
86 |
87 | .hljs-emphasis {
88 | font-style: italic;
89 | }
90 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/hopscotch.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Hopscotch
3 | * by Jan T. Sott
4 | * https://github.com/idleberg/Hopscotch
5 | *
6 | * This work is licensed under the Creative Commons CC0 1.0 Universal License
7 | */
8 |
9 | /* Comment */
10 | .hljs-comment,
11 | .hljs-quote {
12 | color: #989498;
13 | }
14 |
15 | /* Red */
16 | .hljs-variable,
17 | .hljs-template-variable,
18 | .hljs-attribute,
19 | .hljs-tag,
20 | .hljs-name,
21 | .hljs-selector-id,
22 | .hljs-selector-class,
23 | .hljs-regexp,
24 | .hljs-link,
25 | .hljs-deletion {
26 | color: #dd464c;
27 | }
28 |
29 | /* Orange */
30 | .hljs-number,
31 | .hljs-built_in,
32 | .hljs-builtin-name,
33 | .hljs-literal,
34 | .hljs-type,
35 | .hljs-params {
36 | color: #fd8b19;
37 | }
38 |
39 | /* Yellow */
40 | .hljs-class .hljs-title {
41 | color: #fdcc59;
42 | }
43 |
44 | /* Green */
45 | .hljs-string,
46 | .hljs-symbol,
47 | .hljs-bullet,
48 | .hljs-addition {
49 | color: #8fc13e;
50 | }
51 |
52 | /* Aqua */
53 | .hljs-meta {
54 | color: #149b93;
55 | }
56 |
57 | /* Blue */
58 | .hljs-function,
59 | .hljs-section,
60 | .hljs-title {
61 | color: #1290bf;
62 | }
63 |
64 | /* Purple */
65 | .hljs-keyword,
66 | .hljs-selector-tag {
67 | color: #c85e7c;
68 | }
69 |
70 | .hljs {
71 | display: block;
72 | overflow-x: auto;
73 | background: #322931;
74 | color: #b9b5b8;
75 | padding: 0.5em;
76 | }
77 |
78 | .hljs-emphasis {
79 | font-style: italic;
80 | }
81 |
82 | .hljs-strong {
83 | font-weight: bold;
84 | }
85 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/idea.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Intellij Idea-like styling (c) Vasily Polovnyov
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | color: #000;
12 | background: #fff;
13 | }
14 |
15 | .hljs-subst,
16 | .hljs-title {
17 | font-weight: normal;
18 | color: #000;
19 | }
20 |
21 | .hljs-comment,
22 | .hljs-quote {
23 | color: #808080;
24 | font-style: italic;
25 | }
26 |
27 | .hljs-meta {
28 | color: #808000;
29 | }
30 |
31 | .hljs-tag {
32 | background: #efefef;
33 | }
34 |
35 | .hljs-section,
36 | .hljs-name,
37 | .hljs-literal,
38 | .hljs-keyword,
39 | .hljs-selector-tag,
40 | .hljs-type,
41 | .hljs-selector-id,
42 | .hljs-selector-class {
43 | font-weight: bold;
44 | color: #000080;
45 | }
46 |
47 | .hljs-attribute,
48 | .hljs-number,
49 | .hljs-regexp,
50 | .hljs-link {
51 | font-weight: bold;
52 | color: #0000ff;
53 | }
54 |
55 | .hljs-number,
56 | .hljs-regexp,
57 | .hljs-link {
58 | font-weight: normal;
59 | }
60 |
61 | .hljs-string {
62 | color: #008000;
63 | font-weight: bold;
64 | }
65 |
66 | .hljs-symbol,
67 | .hljs-bullet,
68 | .hljs-formula {
69 | color: #000;
70 | background: #d0eded;
71 | font-style: italic;
72 | }
73 |
74 | .hljs-doctag {
75 | text-decoration: underline;
76 | }
77 |
78 | .hljs-variable,
79 | .hljs-template-variable {
80 | color: #660e7a;
81 | }
82 |
83 | .hljs-addition {
84 | background: #baeeba;
85 | }
86 |
87 | .hljs-deletion {
88 | background: #ffc8bd;
89 | }
90 |
91 | .hljs-emphasis {
92 | font-style: italic;
93 | }
94 |
95 | .hljs-strong {
96 | font-weight: bold;
97 | }
98 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/ir-black.css:
--------------------------------------------------------------------------------
1 | /*
2 | IR_Black style (c) Vasily Mikhailitchenko
3 | */
4 |
5 | .hljs {
6 | display: block;
7 | overflow-x: auto;
8 | padding: 0.5em;
9 | background: #000;
10 | color: #f8f8f8;
11 | }
12 |
13 | .hljs-comment,
14 | .hljs-quote,
15 | .hljs-meta {
16 | color: #7c7c7c;
17 | }
18 |
19 | .hljs-keyword,
20 | .hljs-selector-tag,
21 | .hljs-tag,
22 | .hljs-name {
23 | color: #96cbfe;
24 | }
25 |
26 | .hljs-attribute,
27 | .hljs-selector-id {
28 | color: #ffffb6;
29 | }
30 |
31 | .hljs-string,
32 | .hljs-selector-attr,
33 | .hljs-selector-pseudo,
34 | .hljs-addition {
35 | color: #a8ff60;
36 | }
37 |
38 | .hljs-subst {
39 | color: #daefa3;
40 | }
41 |
42 | .hljs-regexp,
43 | .hljs-link {
44 | color: #e9c062;
45 | }
46 |
47 | .hljs-title,
48 | .hljs-section,
49 | .hljs-type,
50 | .hljs-doctag {
51 | color: #ffffb6;
52 | }
53 |
54 | .hljs-symbol,
55 | .hljs-bullet,
56 | .hljs-variable,
57 | .hljs-template-variable,
58 | .hljs-literal {
59 | color: #c6c5fe;
60 | }
61 |
62 | .hljs-number,
63 | .hljs-deletion {
64 | color:#ff73fd;
65 | }
66 |
67 | .hljs-emphasis {
68 | font-style: italic;
69 | }
70 |
71 | .hljs-strong {
72 | font-weight: bold;
73 | }
74 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/kimbie.dark.css:
--------------------------------------------------------------------------------
1 | /*
2 | Name: Kimbie (dark)
3 | Author: Jan T. Sott
4 | License: Creative Commons Attribution-ShareAlike 4.0 Unported License
5 | URL: https://github.com/idleberg/Kimbie-highlight.js
6 | */
7 |
8 | /* Kimbie Comment */
9 | .hljs-comment,
10 | .hljs-quote {
11 | color: #d6baad;
12 | }
13 |
14 | /* Kimbie Red */
15 | .hljs-variable,
16 | .hljs-template-variable,
17 | .hljs-tag,
18 | .hljs-name,
19 | .hljs-selector-id,
20 | .hljs-selector-class,
21 | .hljs-regexp,
22 | .hljs-meta {
23 | color: #dc3958;
24 | }
25 |
26 | /* Kimbie Orange */
27 | .hljs-number,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params,
33 | .hljs-deletion,
34 | .hljs-link {
35 | color: #f79a32;
36 | }
37 |
38 | /* Kimbie Yellow */
39 | .hljs-title,
40 | .hljs-section,
41 | .hljs-attribute {
42 | color: #f06431;
43 | }
44 |
45 | /* Kimbie Green */
46 | .hljs-string,
47 | .hljs-symbol,
48 | .hljs-bullet,
49 | .hljs-addition {
50 | color: #889b4a;
51 | }
52 |
53 | /* Kimbie Purple */
54 | .hljs-keyword,
55 | .hljs-selector-tag,
56 | .hljs-function {
57 | color: #98676a;
58 | }
59 |
60 | .hljs {
61 | display: block;
62 | overflow-x: auto;
63 | background: #221a0f;
64 | color: #d3af86;
65 | padding: 0.5em;
66 | }
67 |
68 | .hljs-emphasis {
69 | font-style: italic;
70 | }
71 |
72 | .hljs-strong {
73 | font-weight: bold;
74 | }
75 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/kimbie.light.css:
--------------------------------------------------------------------------------
1 | /*
2 | Name: Kimbie (light)
3 | Author: Jan T. Sott
4 | License: Creative Commons Attribution-ShareAlike 4.0 Unported License
5 | URL: https://github.com/idleberg/Kimbie-highlight.js
6 | */
7 |
8 | /* Kimbie Comment */
9 | .hljs-comment,
10 | .hljs-quote {
11 | color: #a57a4c;
12 | }
13 |
14 | /* Kimbie Red */
15 | .hljs-variable,
16 | .hljs-template-variable,
17 | .hljs-tag,
18 | .hljs-name,
19 | .hljs-selector-id,
20 | .hljs-selector-class,
21 | .hljs-regexp,
22 | .hljs-meta {
23 | color: #dc3958;
24 | }
25 |
26 | /* Kimbie Orange */
27 | .hljs-number,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params,
33 | .hljs-deletion,
34 | .hljs-link {
35 | color: #f79a32;
36 | }
37 |
38 | /* Kimbie Yellow */
39 | .hljs-title,
40 | .hljs-section,
41 | .hljs-attribute {
42 | color: #f06431;
43 | }
44 |
45 | /* Kimbie Green */
46 | .hljs-string,
47 | .hljs-symbol,
48 | .hljs-bullet,
49 | .hljs-addition {
50 | color: #889b4a;
51 | }
52 |
53 | /* Kimbie Purple */
54 | .hljs-keyword,
55 | .hljs-selector-tag,
56 | .hljs-function {
57 | color: #98676a;
58 | }
59 |
60 | .hljs {
61 | display: block;
62 | overflow-x: auto;
63 | background: #fbebd4;
64 | color: #84613d;
65 | padding: 0.5em;
66 | }
67 |
68 | .hljs-emphasis {
69 | font-style: italic;
70 | }
71 |
72 | .hljs-strong {
73 | font-weight: bold;
74 | }
75 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/lightfair.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Lightfair style (c) Tristian Kelly
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #fff;
12 | }
13 |
14 | .hljs-name {
15 | color:#01a3a3;
16 | }
17 |
18 | .hljs-tag,.hljs-meta {
19 | color:#778899;
20 | }
21 |
22 | .hljs,
23 | .hljs-subst {
24 | color: #444
25 | }
26 |
27 | .hljs-comment {
28 | color: #888888
29 | }
30 |
31 | .hljs-keyword,
32 | .hljs-attribute,
33 | .hljs-selector-tag,
34 | .hljs-meta-keyword,
35 | .hljs-doctag,
36 | .hljs-name {
37 | font-weight: bold
38 | }
39 |
40 | .hljs-type,
41 | .hljs-string,
42 | .hljs-number,
43 | .hljs-selector-id,
44 | .hljs-selector-class,
45 | .hljs-quote,
46 | .hljs-template-tag,
47 | .hljs-deletion {
48 | color: #4286f4
49 | }
50 |
51 | .hljs-title,
52 | .hljs-section {
53 | color: #4286f4;
54 | font-weight: bold
55 | }
56 |
57 | .hljs-regexp,
58 | .hljs-symbol,
59 | .hljs-variable,
60 | .hljs-template-variable,
61 | .hljs-link,
62 | .hljs-selector-attr,
63 | .hljs-selector-pseudo {
64 | color: #BC6060
65 | }
66 |
67 | .hljs-literal {
68 | color: #62bcbc
69 | }
70 |
71 | .hljs-built_in,
72 | .hljs-bullet,
73 | .hljs-code,
74 | .hljs-addition {
75 | color: #25c6c6
76 | }
77 |
78 | .hljs-meta-string {
79 | color: #4d99bf
80 | }
81 |
82 | .hljs-emphasis {
83 | font-style: italic
84 | }
85 |
86 | .hljs-strong {
87 | font-weight: bold
88 | }
89 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/lioshi.css:
--------------------------------------------------------------------------------
1 | /* lioshi Theme */
2 | /* Original theme - https://github.com/lioshi/vscode-lioshi-theme */
3 |
4 | /* Comment */
5 | .hljs-comment {
6 | color: #8d8d8d;
7 | }
8 |
9 | /* quote */
10 | .hljs-quote {
11 | color: #b3c7d8;
12 | }
13 |
14 | /* Red */
15 | .hljs-variable,
16 | .hljs-template-variable,
17 | .hljs-tag,
18 | .hljs-name,
19 | .hljs-selector-id,
20 | .hljs-selector-class,
21 | .hljs-regexp,
22 | .hljs-deletion {
23 | color: #cc6666;
24 | }
25 |
26 | /* Orange */
27 | .hljs-number,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-subst
33 | .hljs-link {
34 | color: #de935f;
35 | }
36 |
37 | /* Yellow */
38 | .hljs-attribute {
39 | color: #f0c674;
40 | }
41 |
42 | /* Green */
43 | .hljs-string,
44 | .hljs-bullet,
45 | .hljs-params,
46 | .hljs-addition {
47 | color: #b5bd68;
48 | }
49 |
50 | /* Blue */
51 | .hljs-title,
52 | .hljs-meta,
53 | .hljs-section {
54 | color: #81a2be;
55 | }
56 |
57 | /* Purple */
58 | .hljs-selector-tag,
59 | .hljs-keyword,
60 | .hljs-function,
61 | .hljs-class {
62 | color: #be94bb;
63 | }
64 |
65 | /* Purple light */
66 | .hljs-symbol {
67 | color: #dbc4d9;
68 | }
69 |
70 | .hljs {
71 | display: block;
72 | overflow-x: auto;
73 | background: #303030;
74 | color: #c5c8c6;
75 | padding: 0.5em;
76 | }
77 |
78 | .hljs-emphasis {
79 | font-style: italic;
80 | }
81 |
82 | .hljs-strong {
83 | font-weight: bold;
84 | }
85 |
86 |
87 |
88 |
89 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/magula.css:
--------------------------------------------------------------------------------
1 | /*
2 | Description: Magula style for highligh.js
3 | Author: Ruslan Keba
4 | Website: http://rukeba.com/
5 | Version: 1.0
6 | Date: 2009-01-03
7 | Music: Aphex Twin / Xtal
8 | */
9 |
10 | .hljs {
11 | display: block;
12 | overflow-x: auto;
13 | padding: 0.5em;
14 | background-color: #f4f4f4;
15 | color: black;
16 | }
17 |
18 | .hljs-subst {
19 | color: black;
20 | }
21 |
22 | .hljs-string,
23 | .hljs-title,
24 | .hljs-symbol,
25 | .hljs-bullet,
26 | .hljs-attribute,
27 | .hljs-addition,
28 | .hljs-variable,
29 | .hljs-template-tag,
30 | .hljs-template-variable {
31 | color: #050;
32 | }
33 |
34 | .hljs-comment,
35 | .hljs-quote {
36 | color: #777;
37 | }
38 |
39 | .hljs-number,
40 | .hljs-regexp,
41 | .hljs-literal,
42 | .hljs-type,
43 | .hljs-link {
44 | color: #800;
45 | }
46 |
47 | .hljs-deletion,
48 | .hljs-meta {
49 | color: #00e;
50 | }
51 |
52 | .hljs-keyword,
53 | .hljs-selector-tag,
54 | .hljs-doctag,
55 | .hljs-title,
56 | .hljs-section,
57 | .hljs-built_in,
58 | .hljs-tag,
59 | .hljs-name {
60 | font-weight: bold;
61 | color: navy;
62 | }
63 |
64 | .hljs-emphasis {
65 | font-style: italic;
66 | }
67 |
68 | .hljs-strong {
69 | font-weight: bold;
70 | }
71 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/mono-blue.css:
--------------------------------------------------------------------------------
1 | /*
2 | Five-color theme from a single blue hue.
3 | */
4 | .hljs {
5 | display: block;
6 | overflow-x: auto;
7 | padding: 0.5em;
8 | background: #eaeef3;
9 | color: #00193a;
10 | }
11 |
12 | .hljs-keyword,
13 | .hljs-selector-tag,
14 | .hljs-title,
15 | .hljs-section,
16 | .hljs-doctag,
17 | .hljs-name,
18 | .hljs-strong {
19 | font-weight: bold;
20 | }
21 |
22 | .hljs-comment {
23 | color: #738191;
24 | }
25 |
26 | .hljs-string,
27 | .hljs-title,
28 | .hljs-section,
29 | .hljs-built_in,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-addition,
33 | .hljs-tag,
34 | .hljs-quote,
35 | .hljs-name,
36 | .hljs-selector-id,
37 | .hljs-selector-class {
38 | color: #0048ab;
39 | }
40 |
41 | .hljs-meta,
42 | .hljs-subst,
43 | .hljs-symbol,
44 | .hljs-regexp,
45 | .hljs-attribute,
46 | .hljs-deletion,
47 | .hljs-variable,
48 | .hljs-template-variable,
49 | .hljs-link,
50 | .hljs-bullet {
51 | color: #4c81c9;
52 | }
53 |
54 | .hljs-emphasis {
55 | font-style: italic;
56 | }
57 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/monokai-sublime.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #23241f;
12 | }
13 |
14 | .hljs,
15 | .hljs-tag,
16 | .hljs-subst {
17 | color: #f8f8f2;
18 | }
19 |
20 | .hljs-strong,
21 | .hljs-emphasis {
22 | color: #a8a8a2;
23 | }
24 |
25 | .hljs-bullet,
26 | .hljs-quote,
27 | .hljs-number,
28 | .hljs-regexp,
29 | .hljs-literal,
30 | .hljs-link {
31 | color: #ae81ff;
32 | }
33 |
34 | .hljs-code,
35 | .hljs-title,
36 | .hljs-section,
37 | .hljs-selector-class {
38 | color: #a6e22e;
39 | }
40 |
41 | .hljs-strong {
42 | font-weight: bold;
43 | }
44 |
45 | .hljs-emphasis {
46 | font-style: italic;
47 | }
48 |
49 | .hljs-keyword,
50 | .hljs-selector-tag,
51 | .hljs-name,
52 | .hljs-attr {
53 | color: #f92672;
54 | }
55 |
56 | .hljs-symbol,
57 | .hljs-attribute {
58 | color: #66d9ef;
59 | }
60 |
61 | .hljs-params,
62 | .hljs-class .hljs-title {
63 | color: #f8f8f2;
64 | }
65 |
66 | .hljs-string,
67 | .hljs-type,
68 | .hljs-built_in,
69 | .hljs-builtin-name,
70 | .hljs-selector-id,
71 | .hljs-selector-attr,
72 | .hljs-selector-pseudo,
73 | .hljs-addition,
74 | .hljs-variable,
75 | .hljs-template-variable {
76 | color: #e6db74;
77 | }
78 |
79 | .hljs-comment,
80 | .hljs-deletion,
81 | .hljs-meta {
82 | color: #75715e;
83 | }
84 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/monokai.css:
--------------------------------------------------------------------------------
1 | /*
2 | Monokai style - ported by Luigi Maselli - http://grigio.org
3 | */
4 |
5 | .hljs {
6 | display: block;
7 | overflow-x: auto;
8 | padding: 0.5em;
9 | background: #272822;
10 | color: #ddd;
11 | }
12 |
13 | .hljs-tag,
14 | .hljs-keyword,
15 | .hljs-selector-tag,
16 | .hljs-literal,
17 | .hljs-strong,
18 | .hljs-name {
19 | color: #f92672;
20 | }
21 |
22 | .hljs-code {
23 | color: #66d9ef;
24 | }
25 |
26 | .hljs-class .hljs-title {
27 | color: white;
28 | }
29 |
30 | .hljs-attribute,
31 | .hljs-symbol,
32 | .hljs-regexp,
33 | .hljs-link {
34 | color: #bf79db;
35 | }
36 |
37 | .hljs-string,
38 | .hljs-bullet,
39 | .hljs-subst,
40 | .hljs-title,
41 | .hljs-section,
42 | .hljs-emphasis,
43 | .hljs-type,
44 | .hljs-built_in,
45 | .hljs-builtin-name,
46 | .hljs-selector-attr,
47 | .hljs-selector-pseudo,
48 | .hljs-addition,
49 | .hljs-variable,
50 | .hljs-template-tag,
51 | .hljs-template-variable {
52 | color: #a6e22e;
53 | }
54 |
55 | .hljs-comment,
56 | .hljs-quote,
57 | .hljs-deletion,
58 | .hljs-meta {
59 | color: #75715e;
60 | }
61 |
62 | .hljs-keyword,
63 | .hljs-selector-tag,
64 | .hljs-literal,
65 | .hljs-doctag,
66 | .hljs-title,
67 | .hljs-section,
68 | .hljs-type,
69 | .hljs-selector-id {
70 | font-weight: bold;
71 | }
72 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/obsidian.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Obsidian style
3 | * ported by Alexander Marenin (http://github.com/ioncreature)
4 | */
5 |
6 | .hljs {
7 | display: block;
8 | overflow-x: auto;
9 | padding: 0.5em;
10 | background: #282b2e;
11 | }
12 |
13 | .hljs-keyword,
14 | .hljs-selector-tag,
15 | .hljs-literal,
16 | .hljs-selector-id {
17 | color: #93c763;
18 | }
19 |
20 | .hljs-number {
21 | color: #ffcd22;
22 | }
23 |
24 | .hljs {
25 | color: #e0e2e4;
26 | }
27 |
28 | .hljs-attribute {
29 | color: #668bb0;
30 | }
31 |
32 | .hljs-code,
33 | .hljs-class .hljs-title,
34 | .hljs-section {
35 | color: white;
36 | }
37 |
38 | .hljs-regexp,
39 | .hljs-link {
40 | color: #d39745;
41 | }
42 |
43 | .hljs-meta {
44 | color: #557182;
45 | }
46 |
47 | .hljs-tag,
48 | .hljs-name,
49 | .hljs-bullet,
50 | .hljs-subst,
51 | .hljs-emphasis,
52 | .hljs-type,
53 | .hljs-built_in,
54 | .hljs-selector-attr,
55 | .hljs-selector-pseudo,
56 | .hljs-addition,
57 | .hljs-variable,
58 | .hljs-template-tag,
59 | .hljs-template-variable {
60 | color: #8cbbad;
61 | }
62 |
63 | .hljs-string,
64 | .hljs-symbol {
65 | color: #ec7600;
66 | }
67 |
68 | .hljs-comment,
69 | .hljs-quote,
70 | .hljs-deletion {
71 | color: #818e96;
72 | }
73 |
74 | .hljs-selector-class {
75 | color: #A082BD
76 | }
77 |
78 | .hljs-keyword,
79 | .hljs-selector-tag,
80 | .hljs-literal,
81 | .hljs-doctag,
82 | .hljs-title,
83 | .hljs-section,
84 | .hljs-type,
85 | .hljs-name,
86 | .hljs-strong {
87 | font-weight: bold;
88 | }
89 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/ocean.css:
--------------------------------------------------------------------------------
1 | /* Ocean Dark Theme */
2 | /* https://github.com/gavsiu */
3 | /* Original theme - https://github.com/chriskempson/base16 */
4 |
5 | /* Ocean Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #65737e;
9 | }
10 |
11 | /* Ocean Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-tag,
15 | .hljs-name,
16 | .hljs-selector-id,
17 | .hljs-selector-class,
18 | .hljs-regexp,
19 | .hljs-deletion {
20 | color: #bf616a;
21 | }
22 |
23 | /* Ocean Orange */
24 | .hljs-number,
25 | .hljs-built_in,
26 | .hljs-builtin-name,
27 | .hljs-literal,
28 | .hljs-type,
29 | .hljs-params,
30 | .hljs-meta,
31 | .hljs-link {
32 | color: #d08770;
33 | }
34 |
35 | /* Ocean Yellow */
36 | .hljs-attribute {
37 | color: #ebcb8b;
38 | }
39 |
40 | /* Ocean Green */
41 | .hljs-string,
42 | .hljs-symbol,
43 | .hljs-bullet,
44 | .hljs-addition {
45 | color: #a3be8c;
46 | }
47 |
48 | /* Ocean Blue */
49 | .hljs-title,
50 | .hljs-section {
51 | color: #8fa1b3;
52 | }
53 |
54 | /* Ocean Purple */
55 | .hljs-keyword,
56 | .hljs-selector-tag {
57 | color: #b48ead;
58 | }
59 |
60 | .hljs {
61 | display: block;
62 | overflow-x: auto;
63 | background: #2b303b;
64 | color: #c0c5ce;
65 | padding: 0.5em;
66 | }
67 |
68 | .hljs-emphasis {
69 | font-style: italic;
70 | }
71 |
72 | .hljs-strong {
73 | font-weight: bold;
74 | }
75 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/paraiso-dark.css:
--------------------------------------------------------------------------------
1 | /*
2 | Paraíso (dark)
3 | Created by Jan T. Sott (http://github.com/idleberg)
4 | Inspired by the art of Rubens LP (http://www.rubenslp.com.br)
5 | */
6 |
7 | /* Paraíso Comment */
8 | .hljs-comment,
9 | .hljs-quote {
10 | color: #8d8687;
11 | }
12 |
13 | /* Paraíso Red */
14 | .hljs-variable,
15 | .hljs-template-variable,
16 | .hljs-tag,
17 | .hljs-name,
18 | .hljs-selector-id,
19 | .hljs-selector-class,
20 | .hljs-regexp,
21 | .hljs-link,
22 | .hljs-meta {
23 | color: #ef6155;
24 | }
25 |
26 | /* Paraíso Orange */
27 | .hljs-number,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params,
33 | .hljs-deletion {
34 | color: #f99b15;
35 | }
36 |
37 | /* Paraíso Yellow */
38 | .hljs-title,
39 | .hljs-section,
40 | .hljs-attribute {
41 | color: #fec418;
42 | }
43 |
44 | /* Paraíso Green */
45 | .hljs-string,
46 | .hljs-symbol,
47 | .hljs-bullet,
48 | .hljs-addition {
49 | color: #48b685;
50 | }
51 |
52 | /* Paraíso Purple */
53 | .hljs-keyword,
54 | .hljs-selector-tag {
55 | color: #815ba4;
56 | }
57 |
58 | .hljs {
59 | display: block;
60 | overflow-x: auto;
61 | background: #2f1e2e;
62 | color: #a39e9b;
63 | padding: 0.5em;
64 | }
65 |
66 | .hljs-emphasis {
67 | font-style: italic;
68 | }
69 |
70 | .hljs-strong {
71 | font-weight: bold;
72 | }
73 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/paraiso-light.css:
--------------------------------------------------------------------------------
1 | /*
2 | Paraíso (light)
3 | Created by Jan T. Sott (http://github.com/idleberg)
4 | Inspired by the art of Rubens LP (http://www.rubenslp.com.br)
5 | */
6 |
7 | /* Paraíso Comment */
8 | .hljs-comment,
9 | .hljs-quote {
10 | color: #776e71;
11 | }
12 |
13 | /* Paraíso Red */
14 | .hljs-variable,
15 | .hljs-template-variable,
16 | .hljs-tag,
17 | .hljs-name,
18 | .hljs-selector-id,
19 | .hljs-selector-class,
20 | .hljs-regexp,
21 | .hljs-link,
22 | .hljs-meta {
23 | color: #ef6155;
24 | }
25 |
26 | /* Paraíso Orange */
27 | .hljs-number,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params,
33 | .hljs-deletion {
34 | color: #f99b15;
35 | }
36 |
37 | /* Paraíso Yellow */
38 | .hljs-title,
39 | .hljs-section,
40 | .hljs-attribute {
41 | color: #fec418;
42 | }
43 |
44 | /* Paraíso Green */
45 | .hljs-string,
46 | .hljs-symbol,
47 | .hljs-bullet,
48 | .hljs-addition {
49 | color: #48b685;
50 | }
51 |
52 | /* Paraíso Purple */
53 | .hljs-keyword,
54 | .hljs-selector-tag {
55 | color: #815ba4;
56 | }
57 |
58 | .hljs {
59 | display: block;
60 | overflow-x: auto;
61 | background: #e7e9db;
62 | color: #4f424c;
63 | padding: 0.5em;
64 | }
65 |
66 | .hljs-emphasis {
67 | font-style: italic;
68 | }
69 |
70 | .hljs-strong {
71 | font-weight: bold;
72 | }
73 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/pojoaque.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Pojoaque Style by Jason Tate
4 | http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html
5 | Based on Solarized Style from http://ethanschoonover.com/solarized
6 |
7 | */
8 |
9 | .hljs {
10 | display: block;
11 | overflow-x: auto;
12 | padding: 0.5em;
13 | color: #dccf8f;
14 | background: url(./pojoaque.jpg) repeat scroll left top #181914;
15 | }
16 |
17 | .hljs-comment,
18 | .hljs-quote {
19 | color: #586e75;
20 | font-style: italic;
21 | }
22 |
23 | .hljs-keyword,
24 | .hljs-selector-tag,
25 | .hljs-literal,
26 | .hljs-addition {
27 | color: #b64926;
28 | }
29 |
30 | .hljs-number,
31 | .hljs-string,
32 | .hljs-doctag,
33 | .hljs-regexp {
34 | color: #468966;
35 | }
36 |
37 | .hljs-title,
38 | .hljs-section,
39 | .hljs-built_in,
40 | .hljs-name {
41 | color: #ffb03b;
42 | }
43 |
44 | .hljs-variable,
45 | .hljs-template-variable,
46 | .hljs-class .hljs-title,
47 | .hljs-type,
48 | .hljs-tag {
49 | color: #b58900;
50 | }
51 |
52 | .hljs-attribute {
53 | color: #b89859;
54 | }
55 |
56 | .hljs-symbol,
57 | .hljs-bullet,
58 | .hljs-link,
59 | .hljs-subst,
60 | .hljs-meta {
61 | color: #cb4b16;
62 | }
63 |
64 | .hljs-deletion {
65 | color: #dc322f;
66 | }
67 |
68 | .hljs-selector-id,
69 | .hljs-selector-class {
70 | color: #d3a60c;
71 | }
72 |
73 | .hljs-formula {
74 | background: #073642;
75 | }
76 |
77 | .hljs-emphasis {
78 | font-style: italic;
79 | }
80 |
81 | .hljs-strong {
82 | font-weight: bold;
83 | }
84 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/pojoaque.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tulz-app/frontroute/6f13ad036ae6dfb1c5b557e392a9bfda2c2654fe/website/src/main/public/stylesheets/highlightjs/pojoaque.jpg
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/qtcreator_dark.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Qt Creator dark color scheme
4 |
5 | */
6 |
7 |
8 | .hljs {
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | background: #000000;
13 | }
14 |
15 | .hljs,
16 | .hljs-subst,
17 | .hljs-tag,
18 | .hljs-title {
19 | color: #aaaaaa;
20 | }
21 |
22 | .hljs-strong,
23 | .hljs-emphasis {
24 | color: #a8a8a2;
25 | }
26 |
27 | .hljs-bullet,
28 | .hljs-quote,
29 | .hljs-number,
30 | .hljs-regexp,
31 | .hljs-literal {
32 | color: #ff55ff;
33 | }
34 |
35 | .hljs-code
36 | .hljs-selector-class {
37 | color: #aaaaff;
38 | }
39 |
40 | .hljs-emphasis,
41 | .hljs-stronge,
42 | .hljs-type {
43 | font-style: italic;
44 | }
45 |
46 | .hljs-keyword,
47 | .hljs-selector-tag,
48 | .hljs-function,
49 | .hljs-section,
50 | .hljs-symbol,
51 | .hljs-name {
52 | color: #ffff55;
53 | }
54 |
55 | .hljs-attribute {
56 | color: #ff5555;
57 | }
58 |
59 | .hljs-variable,
60 | .hljs-params,
61 | .hljs-class .hljs-title {
62 | color: #8888ff;
63 | }
64 |
65 | .hljs-string,
66 | .hljs-selector-id,
67 | .hljs-selector-attr,
68 | .hljs-selector-pseudo,
69 | .hljs-type,
70 | .hljs-built_in,
71 | .hljs-builtin-name,
72 | .hljs-template-tag,
73 | .hljs-template-variable,
74 | .hljs-addition,
75 | .hljs-link {
76 | color: #ff55ff;
77 | }
78 |
79 | .hljs-comment,
80 | .hljs-meta,
81 | .hljs-deletion {
82 | color: #55ffff;
83 | }
84 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/qtcreator_light.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Qt Creator light color scheme
4 |
5 | */
6 |
7 |
8 | .hljs {
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | background: #ffffff;
13 | }
14 |
15 | .hljs,
16 | .hljs-subst,
17 | .hljs-tag,
18 | .hljs-title {
19 | color: #000000;
20 | }
21 |
22 | .hljs-strong,
23 | .hljs-emphasis {
24 | color: #000000;
25 | }
26 |
27 | .hljs-bullet,
28 | .hljs-quote,
29 | .hljs-number,
30 | .hljs-regexp,
31 | .hljs-literal {
32 | color: #000080;
33 | }
34 |
35 | .hljs-code
36 | .hljs-selector-class {
37 | color: #800080;
38 | }
39 |
40 | .hljs-emphasis,
41 | .hljs-stronge,
42 | .hljs-type {
43 | font-style: italic;
44 | }
45 |
46 | .hljs-keyword,
47 | .hljs-selector-tag,
48 | .hljs-function,
49 | .hljs-section,
50 | .hljs-symbol,
51 | .hljs-name {
52 | color: #808000;
53 | }
54 |
55 | .hljs-attribute {
56 | color: #800000;
57 | }
58 |
59 | .hljs-variable,
60 | .hljs-params,
61 | .hljs-class .hljs-title {
62 | color: #0055AF;
63 | }
64 |
65 | .hljs-string,
66 | .hljs-selector-id,
67 | .hljs-selector-attr,
68 | .hljs-selector-pseudo,
69 | .hljs-type,
70 | .hljs-built_in,
71 | .hljs-builtin-name,
72 | .hljs-template-tag,
73 | .hljs-template-variable,
74 | .hljs-addition,
75 | .hljs-link {
76 | color: #008000;
77 | }
78 |
79 | .hljs-comment,
80 | .hljs-meta,
81 | .hljs-deletion {
82 | color: #008000;
83 | }
84 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/railscasts.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Railscasts-like style (c) Visoft, Inc. (Damien White)
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #232323;
12 | color: #e6e1dc;
13 | }
14 |
15 | .hljs-comment,
16 | .hljs-quote {
17 | color: #bc9458;
18 | font-style: italic;
19 | }
20 |
21 | .hljs-keyword,
22 | .hljs-selector-tag {
23 | color: #c26230;
24 | }
25 |
26 | .hljs-string,
27 | .hljs-number,
28 | .hljs-regexp,
29 | .hljs-variable,
30 | .hljs-template-variable {
31 | color: #a5c261;
32 | }
33 |
34 | .hljs-subst {
35 | color: #519f50;
36 | }
37 |
38 | .hljs-tag,
39 | .hljs-name {
40 | color: #e8bf6a;
41 | }
42 |
43 | .hljs-type {
44 | color: #da4939;
45 | }
46 |
47 |
48 | .hljs-symbol,
49 | .hljs-bullet,
50 | .hljs-built_in,
51 | .hljs-builtin-name,
52 | .hljs-attr,
53 | .hljs-link {
54 | color: #6d9cbe;
55 | }
56 |
57 | .hljs-params {
58 | color: #d0d0ff;
59 | }
60 |
61 | .hljs-attribute {
62 | color: #cda869;
63 | }
64 |
65 | .hljs-meta {
66 | color: #9b859d;
67 | }
68 |
69 | .hljs-title,
70 | .hljs-section {
71 | color: #ffc66d;
72 | }
73 |
74 | .hljs-addition {
75 | background-color: #144212;
76 | color: #e6e1dc;
77 | display: inline-block;
78 | width: 100%;
79 | }
80 |
81 | .hljs-deletion {
82 | background-color: #600;
83 | color: #e6e1dc;
84 | display: inline-block;
85 | width: 100%;
86 | }
87 |
88 | .hljs-selector-class {
89 | color: #9b703f;
90 | }
91 |
92 | .hljs-selector-id {
93 | color: #8b98ab;
94 | }
95 |
96 | .hljs-emphasis {
97 | font-style: italic;
98 | }
99 |
100 | .hljs-strong {
101 | font-weight: bold;
102 | }
103 |
104 | .hljs-link {
105 | text-decoration: underline;
106 | }
107 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/rainbow.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Style with support for rainbow parens
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #474949;
12 | color: #d1d9e1;
13 | }
14 |
15 |
16 | .hljs-comment,
17 | .hljs-quote {
18 | color: #969896;
19 | font-style: italic;
20 | }
21 |
22 | .hljs-keyword,
23 | .hljs-selector-tag,
24 | .hljs-literal,
25 | .hljs-type,
26 | .hljs-addition {
27 | color: #cc99cc;
28 | }
29 |
30 | .hljs-number,
31 | .hljs-selector-attr,
32 | .hljs-selector-pseudo {
33 | color: #f99157;
34 | }
35 |
36 | .hljs-string,
37 | .hljs-doctag,
38 | .hljs-regexp {
39 | color: #8abeb7;
40 | }
41 |
42 | .hljs-title,
43 | .hljs-name,
44 | .hljs-section,
45 | .hljs-built_in {
46 | color: #b5bd68;
47 | }
48 |
49 | .hljs-variable,
50 | .hljs-template-variable,
51 | .hljs-selector-id,
52 | .hljs-class .hljs-title {
53 | color: #ffcc66;
54 | }
55 |
56 | .hljs-section,
57 | .hljs-name,
58 | .hljs-strong {
59 | font-weight: bold;
60 | }
61 |
62 | .hljs-symbol,
63 | .hljs-bullet,
64 | .hljs-subst,
65 | .hljs-meta,
66 | .hljs-link {
67 | color: #f99157;
68 | }
69 |
70 | .hljs-deletion {
71 | color: #dc322f;
72 | }
73 |
74 | .hljs-formula {
75 | background: #eee8d5;
76 | }
77 |
78 | .hljs-attr,
79 | .hljs-attribute {
80 | color: #81a2be;
81 | }
82 |
83 | .hljs-emphasis {
84 | font-style: italic;
85 | }
86 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/routeros.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | highlight.js style for Microtik RouterOS script
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #F0F0F0;
12 | }
13 |
14 | /* Base color: saturation 0; */
15 |
16 | .hljs,
17 | .hljs-subst {
18 | color: #444;
19 | }
20 |
21 | .hljs-comment {
22 | color: #888888;
23 | }
24 |
25 | .hljs-keyword,
26 | .hljs-selector-tag,
27 | .hljs-meta-keyword,
28 | .hljs-doctag,
29 | .hljs-name {
30 | font-weight: bold;
31 | }
32 |
33 | .hljs-attribute {
34 | color: #0E9A00;
35 | }
36 |
37 | .hljs-function {
38 | color: #99069A;
39 | }
40 |
41 | .hljs-builtin-name {
42 | color: #99069A;
43 | }
44 |
45 | /* User color: hue: 0 */
46 |
47 | .hljs-type,
48 | .hljs-string,
49 | .hljs-number,
50 | .hljs-selector-id,
51 | .hljs-selector-class,
52 | .hljs-quote,
53 | .hljs-template-tag,
54 | .hljs-deletion {
55 | color: #880000;
56 | }
57 |
58 | .hljs-title,
59 | .hljs-section {
60 | color: #880000;
61 | font-weight: bold;
62 | }
63 |
64 | .hljs-regexp,
65 | .hljs-symbol,
66 | .hljs-variable,
67 | .hljs-template-variable,
68 | .hljs-link,
69 | .hljs-selector-attr,
70 | .hljs-selector-pseudo {
71 | color: #BC6060;
72 | }
73 |
74 |
75 | /* Language color: hue: 90; */
76 |
77 | .hljs-literal {
78 | color: #78A960;
79 | }
80 |
81 | .hljs-built_in,
82 | .hljs-bullet,
83 | .hljs-code,
84 | .hljs-addition {
85 | color: #0C9A9A;
86 | }
87 |
88 |
89 | /* Meta color: hue: 200 */
90 |
91 | .hljs-meta {
92 | color: #1f7199;
93 | }
94 |
95 | .hljs-meta-string {
96 | color: #4d99bf;
97 | }
98 |
99 |
100 | /* Misc effects */
101 |
102 | .hljs-emphasis {
103 | font-style: italic;
104 | }
105 |
106 | .hljs-strong {
107 | font-weight: bold;
108 | }
109 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/school-book.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | School Book style from goldblog.com.ua (c) Zaripov Yura
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 15px 0.5em 0.5em 30px;
11 | font-size: 11px;
12 | line-height:16px;
13 | background:#f6f6ae url(./school-book.png);
14 | border-top: solid 2px #d2e8b9;
15 | border-bottom: solid 1px #d2e8b9;
16 | }
17 |
18 | .hljs-keyword,
19 | .hljs-selector-tag,
20 | .hljs-literal {
21 | color:#005599;
22 | font-weight:bold;
23 | }
24 |
25 | .hljs,
26 | .hljs-subst {
27 | color: #3e5915;
28 | }
29 |
30 | .hljs-string,
31 | .hljs-title,
32 | .hljs-section,
33 | .hljs-type,
34 | .hljs-symbol,
35 | .hljs-bullet,
36 | .hljs-attribute,
37 | .hljs-built_in,
38 | .hljs-builtin-name,
39 | .hljs-addition,
40 | .hljs-variable,
41 | .hljs-template-tag,
42 | .hljs-template-variable,
43 | .hljs-link {
44 | color: #2c009f;
45 | }
46 |
47 | .hljs-comment,
48 | .hljs-quote,
49 | .hljs-deletion,
50 | .hljs-meta {
51 | color: #e60415;
52 | }
53 |
54 | .hljs-keyword,
55 | .hljs-selector-tag,
56 | .hljs-literal,
57 | .hljs-doctag,
58 | .hljs-title,
59 | .hljs-section,
60 | .hljs-type,
61 | .hljs-name,
62 | .hljs-selector-id,
63 | .hljs-strong {
64 | font-weight: bold;
65 | }
66 |
67 | .hljs-emphasis {
68 | font-style: italic;
69 | }
70 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/school-book.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tulz-app/frontroute/6f13ad036ae6dfb1c5b557e392a9bfda2c2654fe/website/src/main/public/stylesheets/highlightjs/school-book.png
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/shades-of-purple.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Shades of Purple Theme — for Highlightjs.
3 | *
4 | * @author (c) Ahmad Awais
5 | * @link GitHub Repo → https://github.com/ahmadawais/Shades-of-Purple-HighlightJS
6 | * @version 1.5.0
7 | */
8 |
9 | .hljs {
10 | display: block;
11 | overflow-x: auto;
12 | /* Custom font is optional */
13 | /* font-family: 'Operator Mono', 'Fira Code', 'Menlo', 'Monaco', 'Courier New', 'monospace'; */
14 | padding: 0.5em;
15 | background: #2d2b57;
16 | font-weight: normal;
17 | }
18 |
19 | .hljs-title {
20 | color: #fad000;
21 | font-weight: normal;
22 | }
23 |
24 | .hljs-name {
25 | color: #a1feff;
26 | }
27 |
28 | .hljs-tag {
29 | color: #ffffff;
30 | }
31 |
32 | .hljs-attr {
33 | color: #f8d000;
34 | font-style: italic;
35 | }
36 |
37 | .hljs-built_in,
38 | .hljs-selector-tag,
39 | .hljs-section {
40 | color: #fb9e00;
41 | }
42 |
43 | .hljs-keyword {
44 | color: #fb9e00;
45 | }
46 |
47 | .hljs,
48 | .hljs-subst {
49 | color: #e3dfff;
50 | }
51 |
52 | .hljs-string,
53 | .hljs-attribute,
54 | .hljs-symbol,
55 | .hljs-bullet,
56 | .hljs-addition,
57 | .hljs-code,
58 | .hljs-regexp,
59 | .hljs-selector-class,
60 | .hljs-selector-attr,
61 | .hljs-selector-pseudo,
62 | .hljs-template-tag,
63 | .hljs-quote,
64 | .hljs-deletion {
65 | color: #4cd213;
66 | }
67 |
68 | .hljs-meta,
69 | .hljs-meta-string {
70 | color: #fb9e00;
71 | }
72 |
73 | .hljs-comment {
74 | color: #ac65ff;
75 | }
76 |
77 | .hljs-keyword,
78 | .hljs-selector-tag,
79 | .hljs-literal,
80 | .hljs-name,
81 | .hljs-strong {
82 | font-weight: normal;
83 | }
84 |
85 | .hljs-literal,
86 | .hljs-number {
87 | color: #fa658d;
88 | }
89 |
90 | .hljs-emphasis {
91 | font-style: italic;
92 | }
93 |
94 | .hljs-strong {
95 | font-weight: bold;
96 | }
97 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/solarized-dark.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #002b36;
12 | color: #839496;
13 | }
14 |
15 | .hljs-comment,
16 | .hljs-quote {
17 | color: #586e75;
18 | }
19 |
20 | /* Solarized Green */
21 | .hljs-keyword,
22 | .hljs-selector-tag,
23 | .hljs-addition {
24 | color: #859900;
25 | }
26 |
27 | /* Solarized Cyan */
28 | .hljs-number,
29 | .hljs-string,
30 | .hljs-meta .hljs-meta-string,
31 | .hljs-literal,
32 | .hljs-doctag,
33 | .hljs-regexp {
34 | color: #2aa198;
35 | }
36 |
37 | /* Solarized Blue */
38 | .hljs-title,
39 | .hljs-section,
40 | .hljs-name,
41 | .hljs-selector-id,
42 | .hljs-selector-class {
43 | color: #268bd2;
44 | }
45 |
46 | /* Solarized Yellow */
47 | .hljs-attribute,
48 | .hljs-attr,
49 | .hljs-variable,
50 | .hljs-template-variable,
51 | .hljs-class .hljs-title,
52 | .hljs-type {
53 | color: #b58900;
54 | }
55 |
56 | /* Solarized Orange */
57 | .hljs-symbol,
58 | .hljs-bullet,
59 | .hljs-subst,
60 | .hljs-meta,
61 | .hljs-meta .hljs-keyword,
62 | .hljs-selector-attr,
63 | .hljs-selector-pseudo,
64 | .hljs-link {
65 | color: #cb4b16;
66 | }
67 |
68 | /* Solarized Red */
69 | .hljs-built_in,
70 | .hljs-deletion {
71 | color: #dc322f;
72 | }
73 |
74 | .hljs-formula {
75 | background: #073642;
76 | }
77 |
78 | .hljs-emphasis {
79 | font-style: italic;
80 | }
81 |
82 | .hljs-strong {
83 | font-weight: bold;
84 | }
85 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/solarized-light.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #fdf6e3;
12 | color: #657b83;
13 | }
14 |
15 | .hljs-comment,
16 | .hljs-quote {
17 | color: #93a1a1;
18 | }
19 |
20 | /* Solarized Green */
21 | .hljs-keyword,
22 | .hljs-selector-tag,
23 | .hljs-addition {
24 | color: #859900;
25 | }
26 |
27 | /* Solarized Cyan */
28 | .hljs-number,
29 | .hljs-string,
30 | .hljs-meta .hljs-meta-string,
31 | .hljs-literal,
32 | .hljs-doctag,
33 | .hljs-regexp {
34 | color: #2aa198;
35 | }
36 |
37 | /* Solarized Blue */
38 | .hljs-title,
39 | .hljs-section,
40 | .hljs-name,
41 | .hljs-selector-id,
42 | .hljs-selector-class {
43 | color: #268bd2;
44 | }
45 |
46 | /* Solarized Yellow */
47 | .hljs-attribute,
48 | .hljs-attr,
49 | .hljs-variable,
50 | .hljs-template-variable,
51 | .hljs-class .hljs-title,
52 | .hljs-type {
53 | color: #b58900;
54 | }
55 |
56 | /* Solarized Orange */
57 | .hljs-symbol,
58 | .hljs-bullet,
59 | .hljs-subst,
60 | .hljs-meta,
61 | .hljs-meta .hljs-keyword,
62 | .hljs-selector-attr,
63 | .hljs-selector-pseudo,
64 | .hljs-link {
65 | color: #cb4b16;
66 | }
67 |
68 | /* Solarized Red */
69 | .hljs-built_in,
70 | .hljs-deletion {
71 | color: #dc322f;
72 | }
73 |
74 | .hljs-formula {
75 | background: #eee8d5;
76 | }
77 |
78 | .hljs-emphasis {
79 | font-style: italic;
80 | }
81 |
82 | .hljs-strong {
83 | font-weight: bold;
84 | }
85 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/srcery.css:
--------------------------------------------------------------------------------
1 | /*
2 | Description: Srcery dark color scheme for highlight.js
3 | Author: Chen Bin
4 | Website: https://srcery-colors.github.io/
5 | Date: 2020-04-06
6 | */
7 |
8 | .hljs {
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | background: #1C1B19;
13 | color: #FCE8C3;
14 | }
15 |
16 | .hljs-strong,
17 | .hljs-emphasis {
18 | color: #918175;
19 | }
20 |
21 | .hljs-bullet,
22 | .hljs-quote,
23 | .hljs-link,
24 | .hljs-number,
25 | .hljs-regexp,
26 | .hljs-literal {
27 | color: #FF5C8F;
28 | }
29 |
30 | .hljs-code,
31 | .hljs-selector-class {
32 | color: #68A8E4
33 | }
34 |
35 | .hljs-emphasis {
36 | font-style: italic;
37 | }
38 |
39 | .hljs-keyword,
40 | .hljs-selector-tag,
41 | .hljs-section,
42 | .hljs-attribute,
43 | .hljs-variable {
44 | color: #EF2F27;
45 | }
46 |
47 | .hljs-name,
48 | .hljs-title {
49 | color: #FBB829;
50 | }
51 |
52 | .hljs-type,
53 | .hljs-params {
54 | color: #0AAEB3;
55 | }
56 |
57 | .hljs-string {
58 | color: #98BC37;
59 | }
60 |
61 | .hljs-subst,
62 | .hljs-built_in,
63 | .hljs-builtin-name,
64 | .hljs-symbol,
65 | .hljs-selector-id,
66 | .hljs-selector-attr,
67 | .hljs-selector-pseudo,
68 | .hljs-template-tag,
69 | .hljs-template-variable,
70 | .hljs-addition {
71 | color: #C07ABE;
72 | }
73 |
74 | .hljs-comment,
75 | .hljs-deletion,
76 | .hljs-meta {
77 | color: #918175;
78 | }
79 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/stackoverflow-dark.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * StackOverflow.com dark style
3 | *
4 | * @stackoverflow/stacks v0.56.0
5 | * https://github.com/StackExchange/Stacks
6 | */
7 |
8 | .hljs {
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | color: #ffffff;
13 | background: #1c1b1b;
14 | }
15 |
16 | .hljs-comment {
17 | color: #999999;
18 | }
19 |
20 | .hljs-keyword,
21 | .hljs-selector-tag,
22 | .hljs-meta-keyword,
23 | .hljs-doctag,
24 | .hljs-section,
25 | .hljs-selector-class,
26 | .hljs-meta,
27 | .hljs-selector-pseudo,
28 | .hljs-attr {
29 | color: #88aece;
30 | }
31 |
32 | .hljs-attribute {
33 | color: v#c59bc1;
34 | }
35 |
36 | .hljs-name,
37 | .hljs-type,
38 | .hljs-number,
39 | .hljs-selector-id,
40 | .hljs-quote,
41 | .hljs-template-tag,
42 | .hljs-built_in,
43 | .hljs-title,
44 | .hljs-literal {
45 | color: #f08d49;
46 | }
47 |
48 | .hljs-string,
49 | .hljs-regexp,
50 | .hljs-symbol,
51 | .hljs-variable,
52 | .hljs-template-variable,
53 | .hljs-link,
54 | .hljs-selector-attr,
55 | .hljs-meta-string {
56 | color: #b5bd68;
57 | }
58 |
59 | .hljs-bullet,
60 | .hljs-code {
61 | color: #cccccc;
62 | }
63 |
64 | .hljs-deletion {
65 | color: #de7176;
66 | }
67 |
68 | .hljs-addition {
69 | color: #76c490;
70 | }
71 |
72 | .hljs-emphasis {
73 | font-style: italic;
74 | }
75 |
76 | .hljs-strong {
77 | font-weight: bold;
78 | }
79 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/stackoverflow-light.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * StackOverflow.com light style
3 | *
4 | * @stackoverflow/stacks v0.56.0
5 | * https://github.com/StackExchange/Stacks
6 | */
7 |
8 | .hljs {
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | color: #2f3337;
13 | background: #f6f6f6;
14 | }
15 |
16 | .hljs-comment {
17 | color: #656e77;
18 | }
19 |
20 | .hljs-keyword,
21 | .hljs-selector-tag,
22 | .hljs-meta-keyword,
23 | .hljs-doctag,
24 | .hljs-section,
25 | .hljs-selector-class,
26 | .hljs-meta,
27 | .hljs-selector-pseudo,
28 | .hljs-attr {
29 | color: #015692;
30 | }
31 |
32 | .hljs-attribute {
33 | color: #803378;
34 | }
35 |
36 | .hljs-name,
37 | .hljs-type,
38 | .hljs-number,
39 | .hljs-selector-id,
40 | .hljs-quote,
41 | .hljs-template-tag,
42 | .hljs-built_in,
43 | .hljs-title,
44 | .hljs-literal {
45 | color: #b75501;
46 | }
47 |
48 | .hljs-string,
49 | .hljs-regexp,
50 | .hljs-symbol,
51 | .hljs-variable,
52 | .hljs-template-variable,
53 | .hljs-link,
54 | .hljs-selector-attr,
55 | .hljs-meta-string {
56 | color: #54790d;
57 | }
58 |
59 | .hljs-bullet,
60 | .hljs-code {
61 | color: #535a60;
62 | }
63 |
64 | .hljs-deletion {
65 | color: #c02d2e;
66 | }
67 |
68 | .hljs-addition {
69 | color: #2f6f44;
70 | }
71 |
72 | .hljs-emphasis {
73 | font-style: italic;
74 | }
75 |
76 | .hljs-strong {
77 | font-weight: bold;
78 | }
79 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/sunburst.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Sunburst-like style (c) Vasily Polovnyov
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #000;
12 | color: #f8f8f8;
13 | }
14 |
15 | .hljs-comment,
16 | .hljs-quote {
17 | color: #aeaeae;
18 | font-style: italic;
19 | }
20 |
21 | .hljs-keyword,
22 | .hljs-selector-tag,
23 | .hljs-type {
24 | color: #e28964;
25 | }
26 |
27 | .hljs-string {
28 | color: #65b042;
29 | }
30 |
31 | .hljs-subst {
32 | color: #daefa3;
33 | }
34 |
35 | .hljs-regexp,
36 | .hljs-link {
37 | color: #e9c062;
38 | }
39 |
40 | .hljs-title,
41 | .hljs-section,
42 | .hljs-tag,
43 | .hljs-name {
44 | color: #89bdff;
45 | }
46 |
47 | .hljs-class .hljs-title,
48 | .hljs-doctag {
49 | text-decoration: underline;
50 | }
51 |
52 | .hljs-symbol,
53 | .hljs-bullet,
54 | .hljs-number {
55 | color: #3387cc;
56 | }
57 |
58 | .hljs-params,
59 | .hljs-variable,
60 | .hljs-template-variable {
61 | color: #3e87e3;
62 | }
63 |
64 | .hljs-attribute {
65 | color: #cda869;
66 | }
67 |
68 | .hljs-meta {
69 | color: #8996a8;
70 | }
71 |
72 | .hljs-formula {
73 | background-color: #0e2231;
74 | color: #f8f8f8;
75 | font-style: italic;
76 | }
77 |
78 | .hljs-addition {
79 | background-color: #253b22;
80 | color: #f8f8f8;
81 | }
82 |
83 | .hljs-deletion {
84 | background-color: #420e09;
85 | color: #f8f8f8;
86 | }
87 |
88 | .hljs-selector-class {
89 | color: #9b703f;
90 | }
91 |
92 | .hljs-selector-id {
93 | color: #8b98ab;
94 | }
95 |
96 | .hljs-emphasis {
97 | font-style: italic;
98 | }
99 |
100 | .hljs-strong {
101 | font-weight: bold;
102 | }
103 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/tomorrow-night-blue.css:
--------------------------------------------------------------------------------
1 | /* Tomorrow Night Blue Theme */
2 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
3 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */
4 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
5 |
6 | /* Tomorrow Comment */
7 | .hljs-comment,
8 | .hljs-quote {
9 | color: #7285b7;
10 | }
11 |
12 | /* Tomorrow Red */
13 | .hljs-variable,
14 | .hljs-template-variable,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-selector-id,
18 | .hljs-selector-class,
19 | .hljs-regexp,
20 | .hljs-deletion {
21 | color: #ff9da4;
22 | }
23 |
24 | /* Tomorrow Orange */
25 | .hljs-number,
26 | .hljs-built_in,
27 | .hljs-builtin-name,
28 | .hljs-literal,
29 | .hljs-type,
30 | .hljs-params,
31 | .hljs-meta,
32 | .hljs-link {
33 | color: #ffc58f;
34 | }
35 |
36 | /* Tomorrow Yellow */
37 | .hljs-attribute {
38 | color: #ffeead;
39 | }
40 |
41 | /* Tomorrow Green */
42 | .hljs-string,
43 | .hljs-symbol,
44 | .hljs-bullet,
45 | .hljs-addition {
46 | color: #d1f1a9;
47 | }
48 |
49 | /* Tomorrow Blue */
50 | .hljs-title,
51 | .hljs-section {
52 | color: #bbdaff;
53 | }
54 |
55 | /* Tomorrow Purple */
56 | .hljs-keyword,
57 | .hljs-selector-tag {
58 | color: #ebbbff;
59 | }
60 |
61 | .hljs {
62 | display: block;
63 | overflow-x: auto;
64 | background: #002451;
65 | color: white;
66 | padding: 0.5em;
67 | }
68 |
69 | .hljs-emphasis {
70 | font-style: italic;
71 | }
72 |
73 | .hljs-strong {
74 | font-weight: bold;
75 | }
76 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/tomorrow-night-bright.css:
--------------------------------------------------------------------------------
1 | /* Tomorrow Night Bright Theme */
2 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */
3 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
4 |
5 | /* Tomorrow Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #969896;
9 | }
10 |
11 | /* Tomorrow Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-tag,
15 | .hljs-name,
16 | .hljs-selector-id,
17 | .hljs-selector-class,
18 | .hljs-regexp,
19 | .hljs-deletion {
20 | color: #d54e53;
21 | }
22 |
23 | /* Tomorrow Orange */
24 | .hljs-number,
25 | .hljs-built_in,
26 | .hljs-builtin-name,
27 | .hljs-literal,
28 | .hljs-type,
29 | .hljs-params,
30 | .hljs-meta,
31 | .hljs-link {
32 | color: #e78c45;
33 | }
34 |
35 | /* Tomorrow Yellow */
36 | .hljs-attribute {
37 | color: #e7c547;
38 | }
39 |
40 | /* Tomorrow Green */
41 | .hljs-string,
42 | .hljs-symbol,
43 | .hljs-bullet,
44 | .hljs-addition {
45 | color: #b9ca4a;
46 | }
47 |
48 | /* Tomorrow Blue */
49 | .hljs-title,
50 | .hljs-section {
51 | color: #7aa6da;
52 | }
53 |
54 | /* Tomorrow Purple */
55 | .hljs-keyword,
56 | .hljs-selector-tag {
57 | color: #c397d8;
58 | }
59 |
60 | .hljs {
61 | display: block;
62 | overflow-x: auto;
63 | background: black;
64 | color: #eaeaea;
65 | padding: 0.5em;
66 | }
67 |
68 | .hljs-emphasis {
69 | font-style: italic;
70 | }
71 |
72 | .hljs-strong {
73 | font-weight: bold;
74 | }
75 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/tomorrow-night-eighties.css:
--------------------------------------------------------------------------------
1 | /* Tomorrow Night Eighties Theme */
2 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */
3 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
4 |
5 | /* Tomorrow Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #999999;
9 | }
10 |
11 | /* Tomorrow Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-tag,
15 | .hljs-name,
16 | .hljs-selector-id,
17 | .hljs-selector-class,
18 | .hljs-regexp,
19 | .hljs-deletion {
20 | color: #f2777a;
21 | }
22 |
23 | /* Tomorrow Orange */
24 | .hljs-number,
25 | .hljs-built_in,
26 | .hljs-builtin-name,
27 | .hljs-literal,
28 | .hljs-type,
29 | .hljs-params,
30 | .hljs-meta,
31 | .hljs-link {
32 | color: #f99157;
33 | }
34 |
35 | /* Tomorrow Yellow */
36 | .hljs-attribute {
37 | color: #ffcc66;
38 | }
39 |
40 | /* Tomorrow Green */
41 | .hljs-string,
42 | .hljs-symbol,
43 | .hljs-bullet,
44 | .hljs-addition {
45 | color: #99cc99;
46 | }
47 |
48 | /* Tomorrow Blue */
49 | .hljs-title,
50 | .hljs-section {
51 | color: #6699cc;
52 | }
53 |
54 | /* Tomorrow Purple */
55 | .hljs-keyword,
56 | .hljs-selector-tag {
57 | color: #cc99cc;
58 | }
59 |
60 | .hljs {
61 | display: block;
62 | overflow-x: auto;
63 | background: #2d2d2d;
64 | color: #cccccc;
65 | padding: 0.5em;
66 | }
67 |
68 | .hljs-emphasis {
69 | font-style: italic;
70 | }
71 |
72 | .hljs-strong {
73 | font-weight: bold;
74 | }
75 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/tomorrow-night.css:
--------------------------------------------------------------------------------
1 | /* Tomorrow Night Theme */
2 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
3 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */
4 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
5 |
6 | /* Tomorrow Comment */
7 | .hljs-comment,
8 | .hljs-quote {
9 | color: #969896;
10 | }
11 |
12 | /* Tomorrow Red */
13 | .hljs-variable,
14 | .hljs-template-variable,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-selector-id,
18 | .hljs-selector-class,
19 | .hljs-regexp,
20 | .hljs-deletion {
21 | color: #cc6666;
22 | }
23 |
24 | /* Tomorrow Orange */
25 | .hljs-number,
26 | .hljs-built_in,
27 | .hljs-builtin-name,
28 | .hljs-literal,
29 | .hljs-type,
30 | .hljs-params,
31 | .hljs-meta,
32 | .hljs-link {
33 | color: #de935f;
34 | }
35 |
36 | /* Tomorrow Yellow */
37 | .hljs-attribute {
38 | color: #f0c674;
39 | }
40 |
41 | /* Tomorrow Green */
42 | .hljs-string,
43 | .hljs-symbol,
44 | .hljs-bullet,
45 | .hljs-addition {
46 | color: #b5bd68;
47 | }
48 |
49 | /* Tomorrow Blue */
50 | .hljs-title,
51 | .hljs-section {
52 | color: #81a2be;
53 | }
54 |
55 | /* Tomorrow Purple */
56 | .hljs-keyword,
57 | .hljs-selector-tag {
58 | color: #b294bb;
59 | }
60 |
61 | .hljs {
62 | display: block;
63 | overflow-x: auto;
64 | background: #1d1f21;
65 | color: #c5c8c6;
66 | padding: 0.5em;
67 | }
68 |
69 | .hljs-emphasis {
70 | font-style: italic;
71 | }
72 |
73 | .hljs-strong {
74 | font-weight: bold;
75 | }
76 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/tomorrow.css:
--------------------------------------------------------------------------------
1 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
2 |
3 | /* Tomorrow Comment */
4 | .hljs-comment,
5 | .hljs-quote {
6 | color: #8e908c;
7 | }
8 |
9 | /* Tomorrow Red */
10 | .hljs-variable,
11 | .hljs-template-variable,
12 | .hljs-tag,
13 | .hljs-name,
14 | .hljs-selector-id,
15 | .hljs-selector-class,
16 | .hljs-regexp,
17 | .hljs-deletion {
18 | color: #c82829;
19 | }
20 |
21 | /* Tomorrow Orange */
22 | .hljs-number,
23 | .hljs-built_in,
24 | .hljs-builtin-name,
25 | .hljs-literal,
26 | .hljs-type,
27 | .hljs-params,
28 | .hljs-meta,
29 | .hljs-link {
30 | color: #f5871f;
31 | }
32 |
33 | /* Tomorrow Yellow */
34 | .hljs-attribute {
35 | color: #eab700;
36 | }
37 |
38 | /* Tomorrow Green */
39 | .hljs-string,
40 | .hljs-symbol,
41 | .hljs-bullet,
42 | .hljs-addition {
43 | color: #718c00;
44 | }
45 |
46 | /* Tomorrow Blue */
47 | .hljs-title,
48 | .hljs-section {
49 | color: #4271ae;
50 | }
51 |
52 | /* Tomorrow Purple */
53 | .hljs-keyword,
54 | .hljs-selector-tag {
55 | color: #8959a8;
56 | }
57 |
58 | .hljs {
59 | display: block;
60 | overflow-x: auto;
61 | background: white;
62 | color: #4d4d4c;
63 | padding: 0.5em;
64 | }
65 |
66 | .hljs-emphasis {
67 | font-style: italic;
68 | }
69 |
70 | .hljs-strong {
71 | font-weight: bold;
72 | }
73 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/vs.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Visual Studio-like style based on original C# coloring by Jason Diamond
4 |
5 | */
6 | .hljs {
7 | display: block;
8 | overflow-x: auto;
9 | padding: 0.5em;
10 | background: white;
11 | color: black;
12 | }
13 |
14 | .hljs-comment,
15 | .hljs-quote,
16 | .hljs-variable {
17 | color: #008000;
18 | }
19 |
20 | .hljs-keyword,
21 | .hljs-selector-tag,
22 | .hljs-built_in,
23 | .hljs-name,
24 | .hljs-tag {
25 | color: #00f;
26 | }
27 |
28 | .hljs-string,
29 | .hljs-title,
30 | .hljs-section,
31 | .hljs-attribute,
32 | .hljs-literal,
33 | .hljs-template-tag,
34 | .hljs-template-variable,
35 | .hljs-type,
36 | .hljs-addition {
37 | color: #a31515;
38 | }
39 |
40 | .hljs-deletion,
41 | .hljs-selector-attr,
42 | .hljs-selector-pseudo,
43 | .hljs-meta {
44 | color: #2b91af;
45 | }
46 |
47 | .hljs-doctag {
48 | color: #808080;
49 | }
50 |
51 | .hljs-attr {
52 | color: #f00;
53 | }
54 |
55 | .hljs-symbol,
56 | .hljs-bullet,
57 | .hljs-link {
58 | color: #00b0e8;
59 | }
60 |
61 |
62 | .hljs-emphasis {
63 | font-style: italic;
64 | }
65 |
66 | .hljs-strong {
67 | font-weight: bold;
68 | }
69 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/xcode.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | XCode style (c) Angel Garcia
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #fff;
12 | color: black;
13 | }
14 |
15 | /* Gray DOCTYPE selectors like WebKit */
16 | .xml .hljs-meta {
17 | color: #c0c0c0;
18 | }
19 |
20 | .hljs-comment,
21 | .hljs-quote {
22 | color: #007400;
23 | }
24 |
25 | .hljs-tag,
26 | .hljs-attribute,
27 | .hljs-keyword,
28 | .hljs-selector-tag,
29 | .hljs-literal,
30 | .hljs-name {
31 | color: #aa0d91;
32 | }
33 |
34 | .hljs-variable,
35 | .hljs-template-variable {
36 | color: #3F6E74;
37 | }
38 |
39 | .hljs-code,
40 | .hljs-string,
41 | .hljs-meta-string {
42 | color: #c41a16;
43 | }
44 |
45 | .hljs-regexp,
46 | .hljs-link {
47 | color: #0E0EFF;
48 | }
49 |
50 | .hljs-title,
51 | .hljs-symbol,
52 | .hljs-bullet,
53 | .hljs-number {
54 | color: #1c00cf;
55 | }
56 |
57 | .hljs-section,
58 | .hljs-meta {
59 | color: #643820;
60 | }
61 |
62 |
63 | .hljs-class .hljs-title,
64 | .hljs-type,
65 | .hljs-built_in,
66 | .hljs-builtin-name,
67 | .hljs-params {
68 | color: #5c2699;
69 | }
70 |
71 | .hljs-attr {
72 | color: #836C28;
73 | }
74 |
75 | .hljs-subst {
76 | color: #000;
77 | }
78 |
79 | .hljs-formula {
80 | background-color: #eee;
81 | font-style: italic;
82 | }
83 |
84 | .hljs-addition {
85 | background-color: #baeeba;
86 | }
87 |
88 | .hljs-deletion {
89 | background-color: #ffc8bd;
90 | }
91 |
92 | .hljs-selector-id,
93 | .hljs-selector-class {
94 | color: #9b703f;
95 | }
96 |
97 | .hljs-doctag,
98 | .hljs-strong {
99 | font-weight: bold;
100 | }
101 |
102 | .hljs-emphasis {
103 | font-style: italic;
104 | }
105 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/xt256.css:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | xt256.css
4 |
5 | Contact: initbar [at] protonmail [dot] ch
6 | : github.com/initbar
7 | */
8 |
9 | .hljs {
10 | display: block;
11 | overflow-x: auto;
12 | color: #eaeaea;
13 | background: #000;
14 | padding: 0.5em;
15 | }
16 |
17 | .hljs-subst {
18 | color: #eaeaea;
19 | }
20 |
21 | .hljs-emphasis {
22 | font-style: italic;
23 | }
24 |
25 | .hljs-strong {
26 | font-weight: bold;
27 | }
28 |
29 | .hljs-builtin-name,
30 | .hljs-type {
31 | color: #eaeaea;
32 | }
33 |
34 | .hljs-params {
35 | color: #da0000;
36 | }
37 |
38 | .hljs-literal,
39 | .hljs-number,
40 | .hljs-name {
41 | color: #ff0000;
42 | font-weight: bolder;
43 | }
44 |
45 | .hljs-comment {
46 | color: #969896;
47 | }
48 |
49 | .hljs-selector-id,
50 | .hljs-quote {
51 | color: #00ffff;
52 | }
53 |
54 | .hljs-template-variable,
55 | .hljs-variable,
56 | .hljs-title {
57 | color: #00ffff;
58 | font-weight: bold;
59 | }
60 |
61 | .hljs-selector-class,
62 | .hljs-keyword,
63 | .hljs-symbol {
64 | color: #fff000;
65 | }
66 |
67 | .hljs-string,
68 | .hljs-bullet {
69 | color: #00ff00;
70 | }
71 |
72 | .hljs-tag,
73 | .hljs-section {
74 | color: #000fff;
75 | }
76 |
77 | .hljs-selector-tag {
78 | color: #000fff;
79 | font-weight: bold;
80 | }
81 |
82 | .hljs-attribute,
83 | .hljs-built_in,
84 | .hljs-regexp,
85 | .hljs-link {
86 | color: #ff00ff;
87 | }
88 |
89 | .hljs-meta {
90 | color: #fff;
91 | font-weight: bolder;
92 | }
93 |
--------------------------------------------------------------------------------
/website/src/main/public/stylesheets/highlightjs/zenburn.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Zenburn style from voldmar.ru (c) Vladimir Epifanov
4 | based on dark.css by Ivan Sagalaev
5 |
6 | */
7 |
8 | .hljs {
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | background: #3f3f3f;
13 | color: #dcdcdc;
14 | }
15 |
16 | .hljs-keyword,
17 | .hljs-selector-tag,
18 | .hljs-tag {
19 | color: #e3ceab;
20 | }
21 |
22 | .hljs-template-tag {
23 | color: #dcdcdc;
24 | }
25 |
26 | .hljs-number {
27 | color: #8cd0d3;
28 | }
29 |
30 | .hljs-variable,
31 | .hljs-template-variable,
32 | .hljs-attribute {
33 | color: #efdcbc;
34 | }
35 |
36 | .hljs-literal {
37 | color: #efefaf;
38 | }
39 |
40 | .hljs-subst {
41 | color: #8f8f8f;
42 | }
43 |
44 | .hljs-title,
45 | .hljs-name,
46 | .hljs-selector-id,
47 | .hljs-selector-class,
48 | .hljs-section,
49 | .hljs-type {
50 | color: #efef8f;
51 | }
52 |
53 | .hljs-symbol,
54 | .hljs-bullet,
55 | .hljs-link {
56 | color: #dca3a3;
57 | }
58 |
59 | .hljs-deletion,
60 | .hljs-string,
61 | .hljs-built_in,
62 | .hljs-builtin-name {
63 | color: #cc9393;
64 | }
65 |
66 | .hljs-addition,
67 | .hljs-comment,
68 | .hljs-quote,
69 | .hljs-meta {
70 | color: #7f9f7f;
71 | }
72 |
73 |
74 | .hljs-emphasis {
75 | font-style: italic;
76 | }
77 |
78 | .hljs-strong {
79 | font-weight: bold;
80 | }
81 |
--------------------------------------------------------------------------------
/website/src/main/resources/doc/examples/index.md:
--------------------------------------------------------------------------------
1 | [Basic routing](/examples/basic-routing/live)
2 |
3 | [Path matching](/examples/path-matching/live)
4 |
5 | [Recursive path matching](/examples/recursive-path-matching/live)
6 |
7 | [Query parameters](/examples/query-parameters/live)
8 |
9 | [Custom directives](/examples/custom-directives/live)
10 |
11 | [Signal](/examples/signal/live)
12 |
13 | [Auth](/examples/auth/live)
14 |
15 | [Tabs](/examples/tabs/live)
16 |
17 | [Nested](/examples/nested/live)
18 |
--------------------------------------------------------------------------------
/website/src/main/resources/doc/getting-started/drafts.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Under the hood, a route is defined by a function, with a signature that approximately looks like
5 | this: `Signal[Location] => Option[Element]`
6 | (the actual signature is a bit more complicated, but that is an implementation detail, and we will not be dealing with
7 | it directly). `Location` is an equivalent of the
8 | [Window.location](https://developer.mozilla.org/en-US/docs/Web/API/Window/location). Because we're in a single page
9 | application, and `Window.location` can change dynamically, the "current location" is modeled as a `Signal[Location]`.
10 |
11 |
12 |
13 | ---
14 |
15 |
16 |
17 | This looks and behaves very similar to nested routes:
18 |
19 | ```scala
20 | pathPrefix("posts") {
21 | div(
22 | path(segment) {
23 | postId
24 | div("Post ID: $postId")
25 | }
26 | )
27 | }
28 | ```
29 |
30 | The difference is that in case of "nested directives", there will be a single modifier applied to the element and a
31 | single subscription to the location signal that will drive the whole "tree of routes".
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/website/src/main/resources/doc/getting-started/index.md:
--------------------------------------------------------------------------------
1 | [Laminar basics](/getting-started/laminar-basics)
2 |
3 | A quick intro into Laminar.
4 |
5 | [First routes](/getting-started/first-routes)
6 |
7 | First steps and main concepts.
8 |
9 | [Handling 'Not Found'](/getting-started/handling-not-found)
10 |
11 | Displaying an element when none of the routes matches.
12 |
13 | [Links and Navigation](/getting-started/links-and-navigation)
14 |
15 | Single-page app navigation.
16 |
17 | [Building routes](/getting-started/building-routes)
18 |
19 | Use-cases and examples.
20 |
21 | [Nested routes](/getting-started/nested-routes)
22 |
23 | Splitting the routes across nested components.
--------------------------------------------------------------------------------
/website/src/main/resources/doc/reference/conjunction.md:
--------------------------------------------------------------------------------
1 | # Conjunction
2 |
3 | Directives can be combined using the `&` operator.
4 |
5 | The resulting directive will match only if both the combined directives match.
6 |
7 | The resulting directive will provide the values provided by the combined directives
8 | in a tuple (except `Unit`s)
9 |
10 | If only one of the combined directives provides a non-`Unit` value, and it's a scalar – the conjunction will provide
11 | a scalar as well (it will not wrap it into a 1-tuple).
12 |
13 | If both combined directives provide a `Unit` — the conjunction will provide a `Unit` as well.
14 |
15 | See the [tuplez](https://github.com/tulz-app/tuplez/) library for more details.
16 |
17 | ```scala
18 | (path("page-1") & param("param-1") & param("param-2")) { (param2, param2) =>
19 | ???
20 | }
21 | ```
22 |
23 | Equivalent to "nesting":
24 |
25 | ```scala
26 | path("page-1") {
27 | param("param-1") { param1 =>
28 | param("param-2") { param2 =>
29 | ???
30 | }
31 | }
32 | }
33 |
34 | ```
35 |
--------------------------------------------------------------------------------
/website/src/main/resources/doc/reference/custom-directives.md:
--------------------------------------------------------------------------------
1 | `TODO`
2 |
3 |
4 | ### `reject`
5 |
6 | ```scala
7 | val reject: Route
8 | ```
9 |
10 | Returns a `Route` that always rejects.
11 |
12 |
13 |
14 |
15 | # Custom directives
16 |
17 | In order to create a custom directive, you should start with an existing one and build
18 | your directive using the combinators that directives provide:
19 |
20 | * `map[R](f: L => R): Directive[R]`
21 | * `flatMap[R](next: L => Directive[R]): Directive[R]`
22 | * `collect[R](f: PartialFunction[L, R]): Directive[R]`
23 | * `filter(predicate: L => Boolean): Directive[L]`
24 |
25 | ## Example
26 |
27 | Say, you wanted to check if the next segment in the path is a number.
28 |
29 | Let's create an `asNumber` directive which we will use like this:
30 |
31 | ```scala
32 | path("user" / segment) { userId =>
33 | asNumber(userId) { userIdAsInt =>
34 | userByIdPage(userId)
35 | }
36 | }
37 | ```
38 |
39 |
40 | For this particular case, using the `long` path matcher would make much more sense, but let's try this anyway,
41 | to keep things simple.
42 |
43 |
44 | ```scala
45 | def asNumber(s: String): Directive[Int] =
46 | Try(s.toInt) match {
47 | case Success(int) => provide(int)
48 | case Failure(_) => reject
49 | }
50 | ```
51 |
52 |
53 | This is an extremely simple example, but most directives, no matter how complicated, can be
54 | derived as easily from the more powerful existing directives and more powerful combinators (like, for example,
55 | the `signal` directive or the `flatMap` combinator).
56 |
57 |
58 | [Live example](/examples/custom-directives)
59 |
--------------------------------------------------------------------------------
/website/src/main/resources/doc/reference/disjunction.md:
--------------------------------------------------------------------------------
1 | # Disjunction
2 |
3 | Directives can be combined using the `|` operator.
4 |
5 | The resulting directive will match if any of the combined directives match.
6 |
7 | The resulting directive will provide the value provided by the first of the combined directives
8 | that matches (the remaining directives are not evaluated).
9 |
10 | ```scala
11 | (path("page-1") | path("page-1-alternative")) {
12 | ???
13 | }
14 | ```
15 |
16 | ```scala
17 | (param("param-1") | param("param-2") | param("param-3")) { valueFromParam1or2or3 =>
18 | ???
19 | }
20 | ```
21 |
--------------------------------------------------------------------------------
/website/src/main/resources/doc/reference/first-match.md:
--------------------------------------------------------------------------------
1 | # `firstMatch`
2 |
3 | `firstMatch` takes a list of routes and returns a new route which tries to apply the alternatives in the order
4 | they are provided, until one of them matches. Rejects if all the alternatives reject.
5 |
6 | ```scala
7 | firstMatch(
8 | pathEnd { /*...*/ },
9 | pathPrefix("pages") {
10 | firstMatch(
11 | path("page-1") { /*...*/ },
12 | path("page-2") { /*...*/ }
13 | )
14 | }
15 | )
16 | ```
17 |
--------------------------------------------------------------------------------
/website/src/main/resources/doc/reference/index.md:
--------------------------------------------------------------------------------
1 | # Directives
2 |
3 | * [Built-in directives](/reference/directives)
4 | * [.signal directive](/reference/signal-directive)
5 | * [Injecting external signal](/reference/injecting-external-signal)
6 | * [Conjunction (&)](/reference/conjunction)
7 | * [Disjunction (|)](/reference/disjunction)
8 |
9 | # Path matchers
10 |
11 | * [Built-in path matchers](/reference/path-matchers)
12 |
--------------------------------------------------------------------------------
/website/src/main/resources/doc/reference/navigation.md:
--------------------------------------------------------------------------------
1 | # Navigation
2 |
3 | `BrowserNavigation` object contains a set of utility methods for programmatic navigation.
4 |
5 |
6 |
7 | ### pushState / replaceState
8 |
9 | ```scala
10 | def pushState(
11 | data: js.Any = js.undefined,
12 | title: String = "",
13 | url: js.UndefOr[String] = js.undefined,
14 | popStateEvent: Boolean = true
15 | ): Unit
16 |
17 | def replaceState(
18 | url: js.UndefOr[String] = js.undefined,
19 | title: String = "",
20 | data: js.Any = js.undefined,
21 | popStateEvent: Boolean = true
22 | ): Unit
23 | ```
24 |
25 | These methods should be used for navigation instead of directly calling `window.history.pushState` / `window.history.replaceState`.
26 |
27 | If `popStateEvent` is `true`, `emitPopStateEvent` will be invoked as well (the browser does not emit this event in case of
28 | programmatic history push/replace).
29 |
30 |
31 |
32 | ### emitPopStateEvent
33 |
34 | ```scala
35 | def emitPopStateEvent(): Unit
36 | ```
37 |
38 | Emits (`dom.window.dispatchEvent`) a `popstate` event.
39 |
40 |
41 | ### preserveScroll
42 |
43 | ```scala
44 | def preserveScroll(keep: Boolean): Unit
45 | ```
46 |
47 | Configures whether `BrowserNavigation` should preserve the window scroll location (in the history state) when pushing state (`pushState`).
48 |
49 |
50 | ## restoreScroll
51 |
52 | ```scala
53 | def restoreScroll(): Unit
54 | ```
55 |
56 | If scroll position is available in the current history state — scrolls the window to that position. You might want to use this after you render your content and want the `back`/`forward` buttons
57 | to get the user to the position on the page where they used to be before navigation.
58 |
--------------------------------------------------------------------------------
/website/src/main/resources/doc/reference/signal-directive.md:
--------------------------------------------------------------------------------
1 | # .signal
2 |
3 | ```scala
4 | (d: Directive[L]).signal: Directive[Signal[L]]
5 | ```
6 |
7 | Transforms a `Directive[L]` into a `Directive[Signal[L]]`.
8 |
9 | Whenever you have a directive, you can call the `.signal` function on it.
10 |
11 | ```scala
12 | param("param-name").signal { (paramSignal: Signal[String]) =>
13 | /* ... */
14 | }
15 | ```
16 |
17 | ## When would this be useful?
18 |
19 | Consider the following example:
20 |
21 | ```scala
22 | def MyPage(selectedTab: String): Element = ???
23 |
24 | pathPrefix("dashboard") {
25 | maybeParam("tab").map(_.getOrElse("summary")) { (selectedTab: String) =>
26 | MyPage(selectedTab)
27 | }
28 | }
29 | ```
30 |
31 | In this case, whenever the query string changes to have a different value for the `tab` parameter, the route will
32 | be re-evaluated and `MyPage(selectedTab)` will be called again.
33 |
34 | For example, you might not want to re-render the whole page from scratch whenever `selectedTab`
35 | changes. Rather, you might want to keep the rendered page with all the DOM and state, and only change a visibility of
36 | some elements on the page according to the `selectedTab` parameter.
37 |
38 | To achieve that, you can use the `.signal` combinator:
39 |
40 | ```scala
41 | def MyPage(selectedTab: Signal[String]): Element = ???
42 |
43 | pathPrefix("dashboard") {
44 | maybeParam("tab").map(_.getOrElse("summary")).signal { (selectedTab: Signal[String]) =>
45 | MyPage(selectedTab)
46 | }
47 | }
48 | ```
49 |
50 | The `selectedTab` is now a `Signal[String]` (not a `String`), and when the `tab` parameter changes,
51 | `MyPage` will not be called again — rather, the value inside the
52 | `selectedTab` signal will change, and you can react to it in your rendering logic.
53 |
--------------------------------------------------------------------------------
/website/src/main/resources/doc/reference/under-the-hood/route.md:
--------------------------------------------------------------------------------
1 | # Route
2 |
3 | `Route` is a `Modifier`, which wraps a function that accepts the current location,
4 | the previous routing state and the current routing state:
5 |
6 | ```scala
7 | trait Route extends ((RouteLocation, RoutingState, RoutingState) => Signal[RouteResult]) with Mod[HtmlElement]
8 | ```
9 |
10 | The result of the `Route` function is either a match or a rejection.
11 |
12 | ```scala
13 | object RouteResult {
14 |
15 | final case class Matched(state: RoutingState, location: RouteLocation, result: () => Signal[Element]) extends RouteResult
16 |
17 | case object Rejected extends RouteResult
18 |
19 | }
20 | ```
21 |
22 | When a route matches, it returns the remaining part of the location (which can subsequently be used in the
23 | nested routes), the updated `RoutingState`, and the `Element` to be rendered (inside a `Signal`).
24 |
25 | A `Route` acts like the `child.maybe <-- ...` modifier. When a `Route` is mounted, it subscribes to the relevant `Signal[Location]`
26 | and reacts to changes in it:
27 |
28 | * if it's a match, the `Route` inserts the result into the parent element;
29 | * if it's a rejection, it removes the previous result (if any) from the parent element;
30 |
31 | There is a top-level location signal, which is derived directly from `window.location`, and changes
32 | whenever a [popstate event](https://developer.mozilla.org/en-US/docs/Web/API/Window/popstate_event)
33 | is emitted. Top-level routes will be subscribing to this signal.
34 |
35 | Routes can (and often do) "consume" parts of the path in the location, leaving the remaining path for
36 | the nested routes. Nested routes do not subscribe to the top-level location signal: rather, they get their own signals
37 | with a location that may have been partially "consumed" by the parent routes.
38 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/Page.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site
2 |
3 | import com.raquo.laminar.api.L.*
4 |
5 | final class Page private (
6 | val path: String,
7 | val link: String,
8 | val title: String,
9 | val render: () => Element
10 | )
11 |
12 | object Page {
13 |
14 | def apply(
15 | path: String,
16 | link: String,
17 | title: String,
18 | render: => Element
19 | ): Page = new Page(
20 | path,
21 | link,
22 | title,
23 | () => render
24 | )
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/SiteModule.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site
2 |
3 | class SiteModule private (
4 | val path: String,
5 | val title: String,
6 | val index: Page,
7 | val navigation: Seq[(String, Seq[Page])]
8 | ) {
9 |
10 | def findPage(path: String): Option[Page] = {
11 | navigation.flatMap(_._2).find(_.path == path)
12 | }
13 |
14 | }
15 |
16 | object SiteModule {
17 |
18 | def apply(
19 | path: String,
20 | title: String,
21 | index: Page,
22 | navigation: (String, Seq[Page])*
23 | ): SiteModule = new SiteModule(path, title, index, navigation)
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/SsrContext.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site
2 |
3 | case class SsrContext(
4 | ssr: Boolean
5 | )
6 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/Wiring.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site
2 |
3 | import org.scalajs.dom
4 |
5 | class Wiring(
6 | val ssrContext: SsrContext,
7 | val routes: Routes
8 | )
9 |
10 | object Wiring {
11 |
12 | def apply(): Wiring = {
13 | new Wiring(
14 | ssrContext = SsrContext(
15 | ssr = dom.window.navigator.userAgent == "frontroute/ssr"
16 | ),
17 | routes = new Routes
18 | )
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/components/DocumentationDisplay.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site.components
2 |
3 | import io.laminext.highlight.Highlight
4 | import com.raquo.laminar.api.L.*
5 | import io.laminext.syntax.dangerous.*
6 |
7 | object DocumentationDisplay {
8 |
9 | def apply(title: String, markdown: String): Element =
10 | div(
11 | cls := "space-y-4",
12 | h1(
13 | cls := "font-display text-3xl font-bold text-gray-900 tracking-wider md:hidden",
14 | title
15 | ),
16 | div(
17 | cls := "prose prose-blue max-w-none",
18 | unsafeInnerHtml := markdown,
19 | onMountCallback { ctx =>
20 | ctx.thisNode.ref.querySelectorAll("pre > code").foreach { codeElement =>
21 | Highlight.highlightElement(codeElement)
22 | }
23 | }
24 | )
25 | )
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/CodeExample.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site.examples
2 |
3 | import com.raquo.laminar.api.L.*
4 |
5 | abstract class CodeExample(
6 | val id: String,
7 | val title: String,
8 | val description: String,
9 | val links: Seq[String]
10 | )(
11 | _code: sourcecode.Text[() => Element]
12 | ) {
13 |
14 | val code: sourcecode.Text[() => Element] = _code
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_advanced_params/AdvancedParamsExample.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site.examples.ex_advanced_params
2 |
3 | import com.yurique.embedded.FileAsString
4 | import frontroute.site.examples.CodeExample
5 |
6 | object AdvancedParamsExample
7 | extends CodeExample(
8 | id = "advanced-query-parameters",
9 | title = "Advanced query parameters",
10 | description = FileAsString("description.md"),
11 | links = Seq(
12 | "/",
13 | "/movies",
14 | "/movies?page=1",
15 | "/movies?page=2",
16 | "/movies?page=3",
17 | )
18 | )(() => {
19 | import com.raquo.laminar.api.L.*
20 | import frontroute.*
21 | import scala.util.Try
22 |
23 | /* */
24 | def intParam(name: String): Directive[Int] =
25 | param(name).emap { string =>
26 | Try(string.toInt).toEither
27 | }
28 | /* */
29 |
30 | routes(
31 | div(
32 | cls := "p-4 min-h-[300px]",
33 | pathEnd {
34 | div(cls := "text-2xl", "Index page.")
35 | },
36 | /* */
37 | (path("movies") & intParam("page").opt.default(0)) { movieId =>
38 | /* */
39 | div(div(cls := "text-2xl", "Movie page."), div(s"Movies, page: $movieId"))
40 | /* */
41 | },
42 | /* */
43 | (noneMatched & extractUnmatchedPath) { unmatched =>
44 | div(
45 | div(cls := "text-2xl", "Not Found"),
46 | div(unmatched.mkString("/", "/", ""))
47 | )
48 | }
49 | )
50 | )
51 | })
52 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_advanced_params/description.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_auth/description.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_basic/description.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_custom_directives/CustomDirectivesExample.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site
2 | package examples
3 | package ex_custom_directives
4 |
5 | import com.yurique.embedded.FileAsString
6 |
7 | object CustomDirectivesExample
8 | extends CodeExample(
9 | id = "custom-directives",
10 | title = "Custom directives",
11 | description = FileAsString("description.md"),
12 | links = Seq(
13 | "/",
14 | "/movie?id=1",
15 | "/movie?id=2",
16 | "/movie?id=not-long"
17 | )
18 | )(() => {
19 | import com.raquo.laminar.api.L.*
20 | import frontroute.*
21 | import scala.util.*
22 |
23 | def longParam(paramName: String): Directive[Long] =
24 | /* */
25 | param(paramName).flatMap { paramValue =>
26 | Try(paramValue.toLong).fold(
27 | _ => reject,
28 | parsed => provide(parsed)
29 | )
30 | }
31 | /* */
32 |
33 | routes(
34 | div(
35 | cls := "p-4 min-h-[300px]",
36 | pathEnd {
37 | div(cls := "text-2xl", "Index page.")
38 | },
39 | (
40 | path("movie") &
41 | /* */
42 | longParam("id")
43 | /* */
44 | ) { movieId =>
45 | div(div(cls := "text-2xl", "Movie page."), div(s"Movie ID (long): $movieId"))
46 | },
47 | (noneMatched & extractUnmatchedPath) { unmatched =>
48 | div(
49 | div(cls := "text-2xl", "Not Found"),
50 | div(unmatched.mkString("/", "/", ""))
51 | )
52 | }
53 | )
54 | )
55 | })
56 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_custom_directives/description.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_effect/EffectExample.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site.examples.ex_effect
2 |
3 | import frontroute.site.examples.CodeExample
4 | import com.yurique.embedded.FileAsString
5 |
6 | object EffectExample
7 | extends CodeExample(
8 | id = "run-effect",
9 | title = "Run Effect",
10 | description = FileAsString("description.md"),
11 | links = Seq(
12 | "/",
13 | "/effect-1",
14 | "/effect-2",
15 | "/some-page"
16 | )
17 | )(() => {
18 | import frontroute.*
19 |
20 | import com.raquo.laminar.api.L.*
21 | import org.scalajs.dom
22 |
23 | routes(
24 | div(
25 | cls := "p-4 min-h-[300px]",
26 | /* */
27 | pathEnd {
28 | /* */
29 | div(cls := "text-2xl", "Index page.")
30 | /* */
31 | },
32 | path("effect-1") {
33 | runEffect {
34 | dom.console.log("effect 1")
35 | }
36 | },
37 | path("effect-2") {
38 | runEffect {
39 | dom.console.log("effect 2")
40 | }
41 | },
42 | /* */
43 | (noneMatched & extractUnmatchedPath) { unmatched =>
44 | div(
45 | div(cls := "text-2xl", "Not Found"),
46 | div(unmatched.mkString("/", "/", ""))
47 | )
48 | }
49 | )
50 | )
51 | })
52 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_effect/description.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_execute/ExecuteExample.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site.examples.ex_execute
2 |
3 | import frontroute.site.examples.CodeExample
4 | import com.yurique.embedded.FileAsString
5 |
6 | object ExecuteExample
7 | extends CodeExample(
8 | id = "execute",
9 | title = "Execute",
10 | description = FileAsString("description.md"),
11 | links = Seq(
12 | "/",
13 | "/execute-1",
14 | "/execute-2",
15 | "/execute-2/sub-1",
16 | "/execute-2/sub-2",
17 | "/execute-2/sub-2/sub-sub-1",
18 | "/execute-2/sub-2/sub-sub-2",
19 | "/some-page"
20 | )
21 | )(() => {
22 | import frontroute.*
23 | import com.raquo.laminar.api.L.*
24 | import org.scalajs.dom
25 |
26 | routes(
27 | div(
28 | cls := "p-4 min-h-[300px]",
29 | pathEnd.execute {
30 | dom.console.log("root")
31 | },
32 | path("execute-1").execute {
33 | dom.console.log("execute-1")
34 | },
35 | pathPrefix("execute-2") {
36 | firstMatch(
37 | pathEnd.execute {
38 | dom.console.log("execute-2")
39 | },
40 | path(segment).execute { s =>
41 | dom.console.log(s"execute-2/${s}")
42 | },
43 | path(segment / segment).execute { case (s1, s2) =>
44 | dom.console.log(s"execute-2/${s1}/${s2}")
45 | },
46 | )
47 | },
48 | (noneMatched & extractUnmatchedPath) { unmatched =>
49 | div(
50 | div(cls := "text-2xl", "Not Found"),
51 | div(unmatched.mkString("/", "/", ""))
52 | )
53 | }
54 | )
55 | )
56 | })
57 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_execute/description.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_extract_matched_path/description.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_matched_path/description.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_multiparams/MultiParamsExample.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site.examples.ex_multiparams
2 |
3 | import com.yurique.embedded.FileAsString
4 | import frontroute.site.examples.CodeExample
5 |
6 | object MultiParamsExample
7 | extends CodeExample(
8 | id = "multi-parameters",
9 | title = "Query multi-parameters",
10 | description = FileAsString("description.md"),
11 | links = Seq(
12 | "/",
13 | "/movies/search?director=cameron&director=spielberg&year=1991&year=1992&year=1993",
14 | "/movies/search?director=cameron&director=quentin",
15 | "/movies/search?year=1991&year=1992&year=1994&year=1995"
16 | )
17 | )(() => {
18 | import com.raquo.laminar.api.L.*
19 | import frontroute.*
20 |
21 | routes(
22 | div(
23 | cls := "p-4 min-h-[300px]",
24 | pathEnd {
25 | div(cls := "text-2xl", "Index page.")
26 | },
27 | /* */
28 | (
29 | path("movies" / "search") &
30 | multiParam("director") &
31 | multiParam("year")
32 | ) { (maybeDirector, maybeYear) =>
33 | /* */
34 | div(div(cls := "text-2xl", "Movie search page."), div(s"Director: $maybeDirector"), div(s"Year: $maybeYear"))
35 | /* */
36 | },
37 | /* */
38 | (noneMatched & extractUnmatchedPath) { unmatched =>
39 | div(
40 | div(cls := "text-2xl", "Not Found"),
41 | div(unmatched.mkString("/", "/", ""))
42 | )
43 | }
44 | )
45 | )
46 | })
47 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_multiparams/description.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_navigate/description.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_navmod/description.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_nested/description.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_params/ParamsExample.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site
2 | package examples
3 | package ex_params
4 |
5 | import com.yurique.embedded.FileAsString
6 |
7 | object ParamsExample
8 | extends CodeExample(
9 | id = "query-parameters",
10 | title = "Query parameters",
11 | description = FileAsString("description.md"),
12 | links = Seq(
13 | "/",
14 | "/movie?id=2356777",
15 | "/movie?id=0306414",
16 | "/movies/search?director=cameron&year=1991",
17 | "/movies/search?director=cameron",
18 | "/movies/search?year=1991"
19 | )
20 | )(() => {
21 | import com.raquo.laminar.api.L.*
22 | import frontroute.*
23 |
24 | routes(
25 | div(
26 | cls := "p-4 min-h-[300px]",
27 | pathEnd {
28 | div(cls := "text-2xl", "Index page.")
29 | },
30 | /* */
31 | (path("movie") & param("id")) { movieId =>
32 | /* */
33 | div(div(cls := "text-2xl", "Movie page."), div(s"Movie ID: $movieId"))
34 | /* */
35 | },
36 | /* */
37 | /* */
38 | (
39 | path("movies" / "search") &
40 | maybeParam("director") &
41 | maybeParam("year")
42 | ) { (maybeDirector, maybeYear) =>
43 | /* */
44 | div(div(cls := "text-2xl", "Movie search page."), div(s"Director: $maybeDirector"), div(s"Year: $maybeYear"))
45 | /* */
46 | },
47 | /* */
48 | (noneMatched & extractUnmatchedPath) { unmatched =>
49 | div(
50 | div(cls := "text-2xl", "Not Found"),
51 | div(unmatched.mkString("/", "/", ""))
52 | )
53 | }
54 | )
55 | )
56 | })
57 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_params/description.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_path_matching/description.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_recursive_path_matching/RecursivePathMatchingExample.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site
2 | package examples
3 | package ex_recursive_path_matching
4 |
5 | import com.yurique.embedded.FileAsString
6 |
7 | object RecursivePathMatchingExample
8 | extends CodeExample(
9 | id = "recursive-path-matching",
10 | title = "Recursive path matching",
11 | description = FileAsString("description.md"),
12 | links = Seq(
13 | "/",
14 | "/recursive",
15 | "/recursive/1",
16 | "/recursive/1/2",
17 | "/recursive/1/2/3",
18 | "/recursive/1/2/3/4",
19 | "/recursive/1/2/3/4/5"
20 | )
21 | )(() => {
22 | import com.raquo.laminar.api.L.*
23 | import frontroute.*
24 |
25 | def recursivePathMatch: Directive[List[String]] =
26 | /* */
27 | pathEnd.mapTo(List.empty[String]) | pathPrefix(segment).flatMap { head =>
28 | recursivePathMatch.map { rest =>
29 | head :: rest
30 | }
31 | }
32 | /* */
33 |
34 | routes(
35 | div(
36 | cls := "p-4 min-h-[300px]",
37 | pathEnd {
38 | div(cls := "text-2xl", "Index page.")
39 | },
40 | (
41 | pathPrefix("recursive") &
42 | /* */
43 | recursivePathMatch
44 | /* */
45 | ) { segments =>
46 | div(div(cls := "text-2xl", "Recursive page."), div(s"Segments: ${segments.mkString(", ")}"))
47 | },
48 | (noneMatched & extractUnmatchedPath) { unmatched =>
49 | div(
50 | div(cls := "text-2xl", "Not Found"),
51 | div(unmatched.mkString("/", "/", ""))
52 | )
53 | }
54 | )
55 | )
56 | })
57 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_recursive_path_matching/description.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/ex_tabs/description.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/examples/package.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site
2 |
3 | import com.raquo.laminar.api.L.*
4 |
5 | package object examples {
6 |
7 | type TitledExample[E <: Element] = (String, sourcecode.Text[E])
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/layout/PageFooter.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site.layout
2 |
3 | import com.raquo.laminar.api.L.*
4 | import com.raquo.laminar.nodes.ReactiveHtmlElement
5 |
6 | object PageFooter {
7 |
8 | def apply(
9 | ): ReactiveHtmlElement.Base =
10 | div(
11 | cls := "hidden bg-gray-900 text-white p-4"
12 | )
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/layout/PageWrap.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site.layout
2 |
3 | import frontroute.site.Page
4 | import frontroute.site.Site
5 | import frontroute.site.SiteModule
6 | import frontroute.site.Styles
7 | import com.raquo.laminar.api.L.*
8 | import io.laminext.syntax.core.*
9 | import io.laminext.syntax.tailwind.*
10 | import com.raquo.laminar.nodes.ReactiveHtmlElement
11 |
12 | object PageWrap {
13 |
14 | def apply(
15 | $page: Signal[Option[(SiteModule, Page)]],
16 | menuObserver: Observer[Option[ModalContent]]
17 | ): ReactiveHtmlElement.Base = {
18 | div(
19 | linkTag(
20 | rel := "stylesheet",
21 | href <-- Styles.highlightStyle.signal.map(s => Site.thisVersionHref(s"/stylesheets/highlightjs/${s}.css"))
22 | ),
23 | div(
24 | cls := "h-screen flex flex-col",
25 | PageHeader($page, menuObserver),
26 | noScriptTag(
27 | div(
28 | cls := "max-w-5xl border-l-4 border-red-400 bg-red-50 text-red-900 mx-auto p-4 font-condensed",
29 | "Your browser does not support JavaScript: some features of this site may not work properly."
30 | )
31 | ),
32 | div(
33 | cls := "flex-1 flex overflow-hidden",
34 | PageNavigation($page).hiddenIf($page.optionMap(_._1).optionContains(Site.indexModule)),
35 | div(
36 | cls := "flex-1 bg-gray-200 overflow-auto md:p-4",
37 | div(
38 | cls := "lg:container lg:mx-auto lg:max-w-4xl lg:p-8 p-4 bg-white min-h-full flex flex-col",
39 | child.maybe <-- $page.optionMap { case (_, page) => page.render() }
40 | )
41 | )
42 | ),
43 | PageFooter()
44 | )
45 | )
46 | }
47 |
48 | }
49 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/pages/CodeExamplePage.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site.pages
2 |
3 | import com.raquo.laminar.api.L.*
4 | import frontroute.site.components.CodeExampleDisplay
5 | import frontroute.site.examples.CodeExample
6 |
7 | object CodeExamplePage {
8 |
9 | def apply(example: CodeExample): Element = page(example.title) {
10 | CodeExampleDisplay(example)
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/pages/DocumentationPage.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site.pages
2 |
3 | import com.raquo.laminar.api.L.*
4 | import frontroute.site.components.DocumentationDisplay
5 |
6 | object DocumentationPage {
7 |
8 | def apply(title: String, markdown: String): Element = page(title) {
9 | DocumentationDisplay(title, markdown)
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/pages/NotFoundPage.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site.pages
2 |
3 | import com.raquo.laminar.api.L.*
4 | import frontroute.site.components.DocumentationDisplay
5 |
6 | object NotFoundPage {
7 |
8 | def apply(title: String, markdown: String): Element = page(title) {
9 | DocumentationDisplay(title, markdown)
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/website/src/main/scala/frontroute/site/pages/package.scala:
--------------------------------------------------------------------------------
1 | package frontroute.site
2 |
3 | import com.raquo.laminar.api.L.*
4 | import frontroute.*
5 |
6 | package object pages {
7 |
8 | def page(
9 | title: String,
10 | description: Option[String] = None,
11 | keywords: Option[String] = None,
12 | status: PageStatusCode = PageStatusCode.Ok
13 | )(
14 | content: => Element
15 | ): Element =
16 | content.amend(
17 | onMountCallback { _ =>
18 | DocumentMeta.set(
19 | title = title,
20 | description = description,
21 | keywords = keywords,
22 | status = status
23 | )
24 | }
25 | )
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/website/src/main/static/fonts/Inter-VariableFont_slnt,wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tulz-app/frontroute/6f13ad036ae6dfb1c5b557e392a9bfda2c2654fe/website/src/main/static/fonts/Inter-VariableFont_slnt,wght.ttf
--------------------------------------------------------------------------------
/website/src/main/static/fonts/JetBrainsMono-VariableFont_wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tulz-app/frontroute/6f13ad036ae6dfb1c5b557e392a9bfda2c2654fe/website/src/main/static/fonts/JetBrainsMono-VariableFont_wght.ttf
--------------------------------------------------------------------------------
/website/src/main/static/fonts/Oxanium-VariableFont_wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tulz-app/frontroute/6f13ad036ae6dfb1c5b557e392a9bfda2c2654fe/website/src/main/static/fonts/Oxanium-VariableFont_wght.ttf
--------------------------------------------------------------------------------
/website/src/main/static/stylesheets/fonts.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'Inter';
3 | src: url('../fonts/Inter-VariableFont_slnt,wght.ttf') format('truetype supports variations'),
4 | url('../fonts/Inter-VariableFont_slnt,wght.ttf') format('truetype-variations');
5 | font-weight: 100 1000;
6 | font-stretch: 25% 151%;
7 | }
8 | @font-face {
9 | font-family: 'JetBrains Mono';
10 | src: url('../fonts/JetBrainsMono-VariableFont_wght.ttf') format('truetype supports variations'),
11 | url('../fonts/JetBrainsMono-VariableFont_wght.ttf') format('truetype-variations');
12 | font-weight: 100 1000;
13 | font-stretch: 25% 151%;
14 | }
15 | @font-face {
16 | font-family: 'Oxanium';
17 | src: url('../fonts/Oxanium-VariableFont_wght.ttf') format('truetype supports variations'),
18 | url('../fonts/Oxanium-VariableFont_wght.ttf') format('truetype-variations');
19 | font-weight: 100 1000;
20 | font-stretch: 25% 151%;
21 | }
22 |
--------------------------------------------------------------------------------
/website/src/main/static/stylesheets/index.css:
--------------------------------------------------------------------------------
1 | @import './tailwind.css';
2 | @import './fonts.css';
3 | @import './markdown.css';
4 | @import './buttons.css';
5 |
6 |
7 | @layer base {
8 |
9 | body {
10 | @apply font-serif;
11 | }
12 |
13 | [type='text'],
14 | [type='email'],
15 | [type='url'],
16 | [type='password'],
17 | [type='number'],
18 | [type='date'],
19 | [type='datetime-local'],
20 | [type='month'],
21 | [type='search'],
22 | [type='tel'],
23 | [type='time'],
24 | [type='week'],
25 | [multiple],
26 | textarea,
27 | select {
28 | @apply shadow-sm focus:ring-blue-500 focus:border-blue-500 block w-full p-1 border-blue-300 rounded-md bg-blue-50 text-blue-700 placeholder-blue-400 font-mono;
29 | }
30 |
31 | }
32 |
33 |
--------------------------------------------------------------------------------
/website/src/main/static/stylesheets/markdown.css:
--------------------------------------------------------------------------------
1 | .prose code:not(.hljs) {
2 | @apply bg-blue-50 !important;
3 | @apply hover:bg-blue-200 !important;
4 | @apply text-blue-900 !important;
5 | @apply px-1 !important;
6 | @apply rounded !important;
7 | }
8 |
9 | .prose code:not(.hljs):before {
10 | content: "" !important;
11 | }
12 |
13 | .prose code:not(.hljs):after {
14 | content: "" !important;
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/website/src/main/static/stylesheets/tailwind.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 | @tailwind screens;
5 |
--------------------------------------------------------------------------------
/website/stylelint.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | extends: ['stylelint-config-recommended'],
3 | rules: {
4 | 'at-rule-no-unknown': [ true, {
5 | ignoreAtRules: [
6 | 'tailwind',
7 | 'apply',
8 | 'variants',
9 | 'responsive',
10 | 'screen'
11 | ]
12 | }],
13 | 'declaration-block-trailing-semicolon': false,
14 | 'no-descending-specificity': null,
15 | 'max-nesting-depth': 10,
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/website/vite.config.js:
--------------------------------------------------------------------------------
1 | import {resolve} from 'path'
2 | import {createHtmlPlugin} from 'vite-plugin-html'
3 | import commonjs from '@rollup/plugin-commonjs';
4 | import viteCompression from 'vite-plugin-compression';
5 | import fs from 'fs'
6 |
7 | import scalaVersion from './scala-version'
8 |
9 | const frontrouteVersion = fs.readFileSync('.frontroute-version')
10 |
11 | // https://vitejs.dev/config/
12 | export default ({mode}) => {
13 | const mainJS = `target/scala-${scalaVersion}/website-${mode === 'production' ? 'opt' : 'fastopt'}/main.js`
14 | const script = ``
15 |
16 | /** @type {import('vite').UserConfig} */
17 | return {
18 | server: {
19 | port: 6080,
20 | },
21 | base: `/v/${frontrouteVersion}/`,
22 | publicDir: './src/main/public',
23 | build: {
24 | outDir: `dist/v/${frontrouteVersion}`,
25 | },
26 | optimizeDeps: {
27 | disabled: mode === 'production',
28 | },
29 | plugins: [
30 | ...(mode === 'production' ? [
31 | commonjs(),
32 | viteCompression({
33 | filter: /\.(js|css|html)$/i,
34 | algorithm: 'gzip'
35 | }),
36 | viteCompression({
37 | filter: /\.(js|css|html)$/i,
38 | algorithm: 'brotliCompress'
39 | }),
40 | ] : []),
41 | createHtmlPlugin({
42 | minify: mode === 'production',
43 | inject: {
44 | data: {
45 | script,
46 | pl: mode === 'production' ? '' : ''
47 | },
48 | },
49 | }),
50 | ],
51 | resolve: {
52 | alias: {
53 | 'stylesheets': resolve(__dirname, './src/main/static/stylesheets'),
54 | 'svg': resolve(__dirname, './src/main/static/svg'),
55 | }
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------