# NOTE:
#      some of the settings in this file get overwritten in later config
#      files like _prod.yml, _dev.yml, and _defaults.yml

# =======
# Site settings
# =======
title:          Apache Cordova
title_suffix:   "Apache Cordova"
url:            "https://cordova.apache.org" # the base hostname & protocol
baseurl:        "" # the subpath of the site, e.g. /blog; NOTE: no trailing slash
rss_path:       /feed.xml
description: >
    Apache Cordova is a set of device APIs that allow a web mobile app
    developer to access native device function from JavaScript.

excerpt_separator: <!--more-->

# the version to which /latest/ points
# NOTE:
#      this value gets overwritten in _version.yml, which is a generated file
latest_docs_version: dev

# the docs version that is shown by default when clicking on docs links on the site
default_linked_docs_version: latest

# the language that serves as the source for the translations
src_language: en

# NOTE:
#      this value _might_ get overwritten on some pages;
#      see _defaults.yml, which is a generated file
language: en

# NOTE:
#      this value gets overwritten in _defaults.yml, which is a generated file
defaults:

# =======
# Build settings
# =======
source:      www
destination: build-dev

# don't erase these files in the output directory
keep_files: [".git", ".svn", "wiki-images", "images", "downloads"]

lsi:  false # don't produce an index for related posts
safe: false # disables plugins

markdown: kramdown

highlighter: rouge

kramdown:
    auto_ids: false
    input: GFM
    hard_wrap: false
    syntax_highlighter: rouge
    syntax_highlighter_opts:
        span:
            disable: true
    entity_output: numeric
    smart_quotes: [apos, apos, quot, quot]
    typographic_symbols:
        ndash: --

# exclude these directories from the build
exclude:
    - static/css-src

algolia_api_key: "0a916ab198bd93d031aa70611271e42e"

collections:
  - members
