# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

baseURL = '//nightlies.apache.org/flink/flink-ml-docs-master'
languageCode = 'en-us'
title = 'Apache Flink Machine Learning Library'
enableGitInfo = false
theme = "book"
pygmentsUseClasses = true

[params]
  # Flag whether this is a stable version or not.
  # Used for the quickstart page.
  IsStable = false

  # Flag to indicate whether an outdated warning should be shown.
  ShowOutDatedWarning = false

  # This is the version referenced in the docs. Please only use these variables
  # to reference a specific Flink version, because this is the only place where
  # we change the version for the complete docs when forking of a release branch
  # etc.
  # The full version string as referenced in Maven (e.g. 1.2.1)
  Version = "2.4-SNAPSHOT"

  # For stable releases, leave the bugfix version out (e.g. 1.2). For snapshot
  # release this should be the same as the regular version
  VersionTitle = "2.4-SNAPSHOT"

  # The branch for this version of Apache Flink Machine Learning Library
  Branch = "master"

  # The github repository for Apache Flink Machine Learning Library
  Repo = "//github.com/apache/flink-ml"

  GithubRepo = "https://github.com/apache/flink-ml.git"

  # This suffix is appended to the Scala-dependent Maven artifact names
  ScalaVersion = "_2.12"

  ProjectHomepage = "//flink.apache.org"

  # External links at the bottom
  # of the menu
  MenuLinks = [
    ["Project Homepage", "//flink.apache.org"],
    ["JavaDocs", "//nightlies.apache.org/flink/flink-ml-docs-master/api/java/"],
    ["PyDocs", "//nightlies.apache.org/flink/flink-ml-docs-master/api/python/"],
  ]

  PreviousDocs = [
    ["2.3", "https://nightlies.apache.org/flink/flink-ml-docs-release-2.3"],
    ["2.2", "https://nightlies.apache.org/flink/flink-ml-docs-release-2.2"],
    ["2.1", "https://nightlies.apache.org/flink/flink-ml-docs-release-2.1"],
    ["2.0", "https://nightlies.apache.org/flink/flink-ml-docs-release-2.0"],
  ]

[markup]
[markup.goldmark.renderer]
  unsafe = true
