# --------------------------------------
# Config
# --------------------------------------
# ----- Site ----- #
# Last version should be the latest English version since the manifesto is first
# written in English, then translated into other languages later.
$versions = Dir.glob("source/en/*").map { |e| e.sub("source/en/", "") }.sort
# $last_version = $versions.last
$last_version = "1.1.0"
$previous_version = $versions[$versions.index($last_version) - 1]
# This list of languages populates the language navigation.
issues_url = "https://github.com/olivierlacan/keep-a-changelog/issues"
$languages = {
"ar" => {
name: "العربية"
},
"cs" => {
name: "Čeština"
},
"da" => {
name: "Dansk",
new: "En ny version er tilgængelig"
},
"de" => {
name: "Deutsch",
notice: "Die neuste version (#{$last_version}) ist noch nicht auf Deutsch
verfügbar, aber du kannst sie dir auf Englisch durchlesen
und bei der Übersetzung mithelfen."
},
"en" => {
default: true,
name: "English",
new: "A new version is available"
},
"es-ES" => {
name: "Español",
notice: "La última versión (#{$last_version}) aun no está disponible en
Español, por ahora puedes leerla en Inglés y
ayudar a traducirla."
},
"fr" => {
name: "Français",
notice: "La dernière version (#{$last_version}) n'est pas encore disponible
en français, mais vous pouvez la lire en anglais pour
l'instant et aider à la traduire.",
new: "Une nouvelle version est disponible"
},
"hr" => {
name: "Hrvatski"
},
"id-ID" => {
name: "Indonesia",
new: "Ada versi baru tersedia"
},
"it-IT" => {
name: "Italiano",
notice: "L'ultima versione (#{$last_version}) non è ancora disponibile in
Italiano, ma la potete leggere in Inglese per ora e
potete contribuire a tradurla."
},
"ja" => {
name: "日本語"
},
"nb" => {
name: "Norsk (Bokmål)",
notice: "Den siste versjonen (#{$last_version}) er ikke tilgjengelig på norsk,
men du kan lese den på engelsk og hjelpe med å oversette den.",
new: "En ny versjon er tilgjengelig"
},
"nl" => {
name: "Nederlands"
},
"pl" => {
name: "polski"
},
"pt-BR" => {
name: "Português do Brasil",
notice: "A última versão (#{$last_version}) ainda não está disponível em
Português mas nesse momento você pode lê-la em inglês e
ajudar em sua tradução."
},
"ro" => {
name: "română",
new: "O nouă versiune este disponibilă"
},
"ru" => {
name: "Pyccкий",
notice: "Самая последняя версия (#{$last_version}) ещё пока не переведена на
русский, но вы можете прочитать её на английском и помочь с переводом."
},
"sk" => {
name: "Slovenčina"
},
"ka" => {
name: "ქართული"
},
"sl" => {
name: "Slovenščina"
},
"sr" => {
name: "Srpski"
},
"sv" => {
name: "Svenska",
notice: "Den senaste versionen (#{$last_version}) är ännu inte tillgänglig på svenska,
men du kan läsa det på engelska och även hjälpa till att översätta det."
},
"tr-TR" => {
name: "Türkçe"
},
"uk" => {
name: "Українська"
},
"zh-CN" => {
name: "简体中文",
notice: "最新版 (#{$last_version}) 暂时还没有翻译到简体中文,您可以阅读最新的英语版,并且帮助翻译,不胜感激。"
},
"zh-TW" => {
name: "正體中文",
notice: "最新版 (#{$last_version}) 暫時還沒有翻譯到正體中文,您可以閱讀最新的英語版,並且幫助翻譯,不勝感激。"
},
"ko" => {
name: "한국어"
},
"fa" => {
name: "فارسی"
}
}
$language_count = $languages.size
activate :i18n,
lang_map: $languages,
mount_at_root: :en
set :gauges_id, ""
set :publisher_url, "https://www.facebook.com/olivier.lacan.5"
set :site_url, "https://keepachangelog.com"
redirect "index.html", to: "en/#{$last_version}/index.html"
$languages.each do |language|
code = language.first
versions = Dir.entries("source/#{code}").sort - %w[. ..]
redirect "#{code}/index.html", to: "#{code}/#{versions.last}/index.html"
end
# ----- Assets ----- #
set :css_dir, "assets/stylesheets"
set :js_dir, "assets/javascripts"
set :images_dir, "assets/images"
set :fonts_dir, "assets/fonts"
# ----- Images ----- #
activate :automatic_image_sizes
# ----- Markdown ----- #
activate :syntax
set :markdown_engine, :redcarpet
## Override default Redcarpet renderer in order to define a class
class CustomMarkdownRenderer < Redcarpet::Render::HTML
def doc_header
%()
end
def header(text, header_level)
slug = text.parameterize
tag_name = "h#{header_level}"
anchor_link = ""
header_tag_open = "<#{tag_name} id='#{slug}'>"
output = ""
output << header_tag_open
output << anchor_link
output << text
output << "#{tag_name}>"
output
end
end
$markdown_config = {
fenced_code_blocks: true,
footnotes: true,
smartypants: true,
tables: true,
with_toc_data: true,
renderer: CustomMarkdownRenderer
}
set :markdown, $markdown_config
# --------------------------------------
# Helpers
# --------------------------------------
helpers do
def path_to_url(path)
Addressable::URI.join(config.site_url, path).normalize.to_s
end
def available_translation_for(language)
language_name = language.last[:name]
language_path = "source/#{language.first}"
if File.exist?("#{language_path}/#{$last_version}")
"#{$last_version} #{language_name}"
elsif File.exist?("#{language_path}/#{$previous_version}")
"#{$previous_version} #{language_name}"
end
end
end
# --------------------------------------
# Content
# --------------------------------------
# ----- Directories ----- #
activate :directory_indexes
page "/404.html", directory_index: false
# --------------------------------------
# Production
# --------------------------------------
# ----- Optimization ----- #
configure :build do
set :gauges_id, "5389808eeddd5b055a00440d"
activate :asset_hash
activate :gzip, {exts: %w[
.css
.eot
.htm
.html
.ico
.js
.json
.svg
.ttf
.txt
.woff
]}
activate :minify_css
activate :minify_html do |html|
html.remove_quotes = false
end
activate :minify_javascript
end
# ----- Prefixing ----- #
activate :autoprefixer do |config|
config.browsers = ["last 2 versions", "Explorer >= 10"]
config.cascade = false
end