initial commit

This commit is contained in:
Plailect 2018-02-22 19:52:37 -05:00
commit 3a9fdbcbc8
206 changed files with 21779 additions and 0 deletions

13
.editorconfig Normal file
View File

@ -0,0 +1,13 @@
# editorconfig.org
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = false
[*.md]
trim_trailing_whitespace = false

5
.gitattributes vendored Normal file
View File

@ -0,0 +1,5 @@
_assets/css/vendor/* linguist-vendored
_assets/js/plugins/* linguist-vendored
_assets/js/vendor/* linguist-vendored
assets/fonts/* linguist-vendored
assets/js/vendor/* linguist-vendored

16
.gitignore vendored Normal file
View File

@ -0,0 +1,16 @@
*.gem
*.sublime-project
*.sublime-workspace
.bundle
.DS_Store
.jekyll-metadata
.sass-cache
_asset_bundler_cache
_site
codekit-config.json
example/_site
node_modules
npm-debug.log*
/vendor
torrents
Gemfile.lock

4
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,4 @@
// Place your settings in this file to overwrite default and user settings.
{
"files.associations": {"*.txt": "markdown"}
}

1
CNAME Normal file
View File

@ -0,0 +1 @@
switch.hacks.guide

3
Gemfile Normal file
View File

@ -0,0 +1,3 @@
source "https://rubygems.org"
gem 'jekyll-redirect-from'
gemspec

21
LICENSE.txt Normal file
View File

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2017 Michael Rose
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:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
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.

76
Rakefile Normal file
View File

@ -0,0 +1,76 @@
require "bundler/gem_tasks"
require "jekyll"
require "listen"
def listen_ignore_paths(base, options)
[
/_config\.ya?ml/,
/_site/,
/\.jekyll-metadata/
]
end
def listen_handler(base, options)
site = Jekyll::Site.new(options)
Jekyll::Command.process_site(site)
proc do |modified, added, removed|
t = Time.now
c = modified + added + removed
n = c.length
relative_paths = c.map{ |p| Pathname.new(p).relative_path_from(base).to_s }
print Jekyll.logger.message("Regenerating:", "#{relative_paths.join(", ")} changed... ")
begin
Jekyll::Command.process_site(site)
puts "regenerated in #{Time.now - t} seconds."
rescue => e
puts "error:"
Jekyll.logger.warn "Error:", e.message
Jekyll.logger.warn "Error:", "Run jekyll build --trace for more information."
end
end
end
task :preview do
base = Pathname.new('.').expand_path
options = {
"source" => base.join('test').to_s,
"destination" => base.join('test/_site').to_s,
"force_polling" => false,
"serving" => true,
"theme" => "minimal-mistakes-jekyll"
}
options = Jekyll.configuration(options)
ENV["LISTEN_GEM_DEBUGGING"] = "1"
listener = Listen.to(
base.join("_data"),
base.join("_includes"),
base.join("_layouts"),
base.join("_sass"),
base.join("assets"),
options["source"],
:ignore => listen_ignore_paths(base, options),
:force_polling => options['force_polling'],
&(listen_handler(base, options))
)
begin
listener.start
Jekyll.logger.info "Auto-regeneration:", "enabled for '#{options["source"]}'"
unless options['serving']
trap("INT") do
listener.stop
puts " Halting auto-regeneration."
exit 0
end
loop { sleep 1000 }
end
rescue ThreadError
# You pressed Ctrl-C, oh my!
end
Jekyll::Commands::Serve.process(options)
end

647
_config.yml Normal file
View File

@ -0,0 +1,647 @@
# Welcome to Jekyll!
#
# This config file is meant for settings that affect your entire site, values
# which you are expected to set up once and rarely need to edit after that.
# For technical reasons, this file is *NOT* reloaded automatically when you use
# `jekyll serve`. If you change this file, please restart the server process.
minimal_mistakes_skin : "nord"
# Site Settings
locale : "en-US"
title : "Switch Hacks Guide"
title_separator : "-"
name : "Plailect"
description : "Full Homebrew Guide"
url : "https://switch.hacks.guide" # the base hostname & protocol for your site e.g. "https://mmistakes.github.io"
enforce_ssl : "switch.hacks.guide"
baseurl : # the subpath of your site, e.g. "/blog"
repository : "Plailect/Guide_Switch" # GitHub username/repo-name e.g. "mmistakes/minimal-mistakes"
teaser : # filename of teaser fallback teaser image placed in /images/, .e.g. "500x300.png"
breadcrumbs : # true, false (default)
words_per_minute : 200
comments:
provider : # false (default), "disqus", "discourse", "facebook", "google-plus", "staticman", "custom"
disqus:
shortname : # https://help.disqus.com/customer/portal/articles/466208-what-s-a-shortname-
discourse:
server : # https://meta.discourse.org/t/embedding-discourse-comments-via-javascript/31963 , e.g.: meta.discourse.org
facebook:
# https://developers.facebook.com/docs/plugins/comments
appid :
num_posts : # 5 (default)
colorscheme : # "light" (default), "dark"
staticman:
allowedFields : ['name', 'email', 'url', 'message']
branch : "master"
commitMessage : "New comment."
filename : comment-{@timestamp}
format : "yml"
moderation : true
path : "_data/comments/{options.slug}"
requiredFields : ['name', 'email', 'message']
transforms:
email : "md5"
generatedFields:
date:
type : "date"
options:
format : "iso8601" # "iso8601" (default), "timestamp-seconds", "timestamp-milliseconds"
atom_feed:
path : # blank (default) uses feed.xml
# SEO Related
google_site_verification : jVXoPK_-qzKJp4SScnZYpOIX3yDXfGnAoTBJYixUOwg
bing_site_verification : F3532011519E308583A0A2CAF2DD69E8
alexa_site_verification :
yandex_site_verification :
# Social Sharing
twitter:
username :
facebook:
username :
app_id :
publisher :
og_image : # Open Graph/Twitter default site image
# For specifying social profiles
# - https://developers.google.com/structured-data/customize/social-profiles
social:
type : # Person or Organization (defaults to Person)
name : # If the user or organization name differs from the site's name
links: # An array of links to social media profiles
# Analytics
analytics:
provider : "google-universal" # false (default), "google", "google-universal", "custom"
google:
tracking_id : "UA-86465881-5"
# Site Author
author:
name : "Plailect"
avatar : "bio-photo.png"
bio : "Wii U Hacker"
location : "Nullsec"
email : "Plailect@gmail.com"
uri :
bitbucket :
codepen :
dribbble :
flickr :
facebook :
foursquare :
github : "Plailect"
google_plus :
keybase :
instagram :
lastfm : "Plailect"
linkedin :
pinterest :
soundcloud :
stackoverflow : # "123456/username" (the last part of your profile url, e.g. http://stackoverflow.com/users/123456/username)
steam :
tumblr :
twitter : "Plailect"
vine :
weibo :
xing :
youtube :
# Reading Files
include:
- .htaccess
- _pages
exclude: [
"*.sublime-project",
"*.sublime-workspace",
vendor,
.asset-cache,
.bundle,
.jekyll-assets-cache,
.sass-cache,
assets/js/plugins,
assets/js/_main.js,
assets/js/vendor,
Capfile,
CHANGELOG,
config,
Gemfile,
Gruntfile.js,
gulpfile.js,
LICENSE,
log,
node_modules,
package.json,
Rakefile,
README,
tmp,
_pages/af_ZA,
_pages/ar_SA,
_pages/ca_ES,
_pages/cs_CZ,
_pages/da_DK,
_pages/de_DE,
_pages/el_GR,
_pages/en_PT,
# _pages/en_US,
_pages/es_EM,
_pages/es_ES,
_pages/fi_FI,
_pages/fr_FR,
_pages/he_IL,
_pages/hu_HU,
_pages/id_ID,
_pages/it_IT,
_pages/ja_JP,
_pages/ko_KR,
_pages/ms_MY,
_pages/no_NO,
_pages/nl_NL,
_pages/pl_PL,
_pages/pt_BR,
_pages/pt_PT,
_pages/ro_RO,
_pages/ru_RU,
_pages/sr_SP,
_pages/sv_SE,
_pages/th_TH,
_pages/tr_TR,
_pages/uk_UA,
_pages/vi_VN,
_pages/zh_CN,
_pages/zh_TW,
]
keep_files:
- .git
- .svn
encoding: "utf-8"
markdown_ext: "markdown,mkdown,mkdn,mkd,md,txt"
# Conversion
markdown: kramdown
highlighter: rouge
lsi: false
excerpt_separator: "\n\n"
incremental: false
# Markdown Processing
kramdown:
input: GFM
hard_wrap: false
auto_ids: true
footnote_nr: 1
entity_output: as_char
toc_levels: 1..6
smart_quotes: lsquo,rsquo,ldquo,rdquo
enable_coderay: false
# Sass/SCSS
sass:
sass_dir: _sass
style: compressed # http://sass-lang.com/documentation/file.SASS_REFERENCE.html#output_style
# Plugins
plugins:
- jekyll-paginate
- jekyll-sitemap
- jekyll-gist
- jekyll-feed
- jemoji
- jekyll-redirect-from
# mimic GitHub Pages with --safe
whitelist:
- jekyll-paginate
- jekyll-sitemap
- jekyll-gist
- jekyll-feed
- jemoji
# Archives
# Type
# - GitHub Pages compatible archive pages built with Liquid ~> type: liquid (default)
# - Jekyll Archives plugin archive pages ~> type: jekyll-archives
# Path (examples)
# - Archive page should exist at path when using Liquid method or you can
# expect broken links (especially with breadcrumbs enabled)
# - <base_path>/tags/my-awesome-tag/index.html ~> path: /tags/
# - <base_path/categories/my-awesome-category/index.html ~> path: /categories/
# - <base_path/my-awesome-category/index.html ~> path: /
category_archive:
type: liquid
path: /categories/
tag_archive:
type: liquid
path: /tags/
# https://github.com/jekyll/jekyll-archives
# jekyll-archives:
# enabled:
# - categories
# - tags
# layouts:
# category: archive-taxonomy
# tag: archive-taxonomy
# permalinks:
# category: /categories/:name/
# tag: /tags/:name/
# HTML Compression
# - http://jch.penibelst.de/
compress_html:
clippings: all
ignore:
envs: development
# Defaults
defaults:
# _pages
- scope:
path: ""
type: pages
values:
layout: single
author_profile: false
sidebar: true
- scope:
path: "_pages/af_ZA"
type: pages
values:
permalink: /af_ZA/:basename:output_ext
lang: af
- scope:
path: "_pages/ar_SA"
type: pages
values:
permalink: /ar_SA/:basename:output_ext
lang: ar
- scope:
path: "_pages/ca_ES"
type: pages
values:
permalink: /ca_ES/:basename:output_ext
lang: ca
- scope:
path: "_pages/cs_CZ"
type: pages
values:
permalink: /cs_CZ/:basename:output_ext
lang: cs
- scope:
path: "_pages/da_DK"
type: pages
values:
permalink: /da_DK/:basename:output_ext
lang: da
- scope:
path: "_pages/de_DE"
type: pages
values:
permalink: /de_DE/:basename:output_ext
lang: ds
- scope:
path: "_pages/el_GR"
type: pages
values:
permalink: /el_GR/:basename:output_ext
lang: el
- scope:
path: "_pages/en_PT"
type: pages
values:
permalink: /en_PT/:basename:output_ext
lang: en-PT
- scope:
path: "_pages/en_US"
type: pages
values:
permalink: /:basename:output_ext
lang: en
- scope:
path: "_pages/es_ES"
type: pages
values:
permalink: /es_ES/:basename:output_ext
lang: es
- scope:
path: "_pages/fi_FI"
type: pages
values:
permalink: /fi_FI/:basename:output_ext
lang: fi
- scope:
path: "_pages/fr_FR"
type: pages
values:
permalink: /fr_FR/:basename:output_ext
lang: fr
- scope:
path: "_pages/he_IL"
type: pages
values:
permalink: /he_IL/:basename:output_ext
lang: he
- scope:
path: "_pages/hu_HU"
type: pages
values:
permalink: /hu_HU/:basename:output_ext
lang: hu
- scope:
path: "_pages/id_ID"
type: pages
values:
permalink: /id_ID/:basename:output_ext
lang: id
- scope:
path: "_pages/it_IT"
type: pages
values:
permalink: /it_IT/:basename:output_ext
lang: it
- scope:
path: "_pages/ja_JP"
type: pages
values:
permalink: /ja_JP/:basename:output_ext
lang: ja
- scope:
path: "_pages/ko_KR"
type: pages
values:
permalink: /ko_KR/:basename:output_ext
lang: ko
- scope:
path: "_pages/ms_MY"
type: pages
values:
permalink: /ms_MY/:basename:output_ext
lang: ms
- scope:
path: "_pages/no_NO"
type: pages
values:
permalink: /no_NO/:basename:output_ext
lang: no-NO
- scope:
path: "_pages/nl_NL"
type: pages
values:
permalink: /nl_NL/:basename:output_ext
lang: nl
- scope:
path: "_pages/pl_PL"
type: pages
values:
permalink: /pl_PL/:basename:output_ext
lang: pl
- scope:
path: "_pages/pt_BR"
type: pages
values:
permalink: /pt_BR/:basename:output_ext
lang: pt-BR
- scope:
path: "_pages/pt_PT"
type: pages
values:
permalink: /pt_PT/:basename:output_ext
lang: pt-PT
- scope:
path: "_pages/ro_RO"
type: pages
values:
permalink: /ro_RO/:basename:output_ext
lang: ro
- scope:
path: "_pages/ru_RU"
type: pages
values:
permalink: /ru_RU/:basename:output_ext
lang: ru
- scope:
path: "_pages/sr_SP"
type: pages
values:
permalink: /sr_SP/:basename:output_ext
lang: sr
- scope:
path: "_pages/sv_SE"
type: pages
values:
permalink: /sv_SE/:basename:output_ext
lang: sv
- scope:
path: "_pages/th_TH"
type: pages
values:
permalink: /th_TH/:basename:output_ext
lang: th
- scope:
path: "_pages/tr_TR"
type: pages
values:
permalink: /tr_TR/:basename:output_ext
lang: tr
- scope:
path: "_pages/uk_UA"
type: pages
values:
permalink: /uk_UA/:basename:output_ext
lang: uk
- scope:
path: "_pages/vi_VN"
type: pages
values:
permalink: /vi_VN/:basename:output_ext
lang: vi
- scope:
path: "_pages/zh_CN"
type: pages
values:
permalink: /zh_CN/:basename:output_ext
lang: zh-Hans
- scope:
path: "_pages/zh_TW"
type: pages
values:
permalink: /zh_TW/:basename:output_ext
lang: zh-Hant
- scope:
path: "_pages/af_ZA/home.txt"
type: pages
values:
permalink: /af_ZA/index:output_ext
- scope:
path: "_pages/ar_SA/home.txt"
type: pages
values:
permalink: /ar_SA/index:output_ext
- scope:
path: "_pages/ca_ES/home.txt"
type: pages
values:
permalink: /ca_ES/index:output_ext
- scope:
path: "_pages/cs_CZ/home.txt"
type: pages
values:
permalink: /cs_CZ/index:output_ext
- scope:
path: "_pages/da_DK/home.txt"
type: pages
values:
permalink: /da_DK/index:output_ext
- scope:
path: "_pages/de_DE/home.txt"
type: pages
values:
permalink: /de_DE/index:output_ext
- scope:
path: "_pages/el_GR/home.txt"
type: pages
values:
permalink: /el_GR/index:output_ext
- scope:
path: "_pages/en_PT/home.txt"
type: pages
values:
permalink: /en_PT/index:output_ext
- scope:
path: "_pages/en_US/home.txt"
type: pages
values:
permalink: /index:output_ext
- scope:
path: "_pages/es_ES/home.txt"
type: pages
values:
permalink: /es_ES/index:output_ext
- scope:
path: "_pages/fi_FI/home.txt"
type: pages
values:
permalink: /fi_FI/index:output_ext
- scope:
path: "_pages/fr_FR/home.txt"
type: pages
values:
permalink: /fr_FR/index:output_ext
- scope:
path: "_pages/he_IL/home.txt"
type: pages
values:
permalink: /he_IL/index:output_ext
- scope:
path: "_pages/hu_HU/home.txt"
type: pages
values:
permalink: /hu_HU/index:output_ext
- scope:
path: "_pages/id_ID/home.txt"
type: pages
values:
permalink: /id_ID/index:output_ext
- scope:
path: "_pages/it_IT/home.txt"
type: pages
values:
permalink: /it_IT/index:output_ext
- scope:
path: "_pages/ja_JP/home.txt"
type: pages
values:
permalink: /ja_JP/index:output_ext
- scope:
path: "_pages/ko_KR/home.txt"
type: pages
values:
permalink: /ko_KR/index:output_ext
- scope:
path: "_pages/ms_MY/home.txt"
type: pages
values:
permalink: /ms_MY/index:output_ext
- scope:
path: "_pages/no_NO/home.txt"
type: pages
values:
permalink: /no_NO/index:output_ext
- scope:
path: "_pages/nl_NL/home.txt"
type: pages
values:
permalink: /nl_NL/index:output_ext
- scope:
path: "_pages/pl_PL/home.txt"
type: pages
values:
permalink: /pl_PL/index:output_ext
- scope:
path: "_pages/pt_BR/home.txt"
type: pages
values:
permalink: /pt_BR/index:output_ext
- scope:
path: "_pages/pt_PT/home.txt"
type: pages
values:
permalink: /pt_PT/index:output_ext
- scope:
path: "_pages/ro_RO/home.txt"
type: pages
values:
permalink: /ro_RO/index:output_ext
- scope:
path: "_pages/ru_RU/home.txt"
type: pages
values:
permalink: /ru_RU/index:output_ext
- scope:
path: "_pages/sr_SP/home.txt"
type: pages
values:
permalink: /sr_SP/index:output_ext
- scope:
path: "_pages/sv_SE/home.txt"
type: pages
values:
permalink: /sv_SE/index:output_ext
- scope:
path: "_pages/th_TH/home.txt"
type: pages
values:
permalink: /th_TH/index:output_ext
- scope:
path: "_pages/tr_TR/home.txt"
type: pages
values:
permalink: /tr_TR/index:output_ext
- scope:
path: "_pages/uk_UA/home.txt"
type: pages
values:
permalink: /uk_UA/index:output_ext
- scope:
path: "_pages/vi_VN/home.txt"
type: pages
values:
permalink: /vi_VN/index:output_ext
- scope:
path: "_pages/zh_CN/home.txt"
type: pages
values:
permalink: /zh_CN/index:output_ext
- scope:
path: "_pages/zh_TW/home.txt"
type: pages
values:
permalink: /zh_TW/index:output_ext

View File

@ -0,0 +1,57 @@
---
main:
-
title: Home
url: /
-
title: FAQ
url: faq
-
title: Donations
url: donations
-
title: Credits
url: credits
-
title: Troubleshooting
url: troubleshooting
-
title: Homebrew Development
url: homebrew-development
-
title: Site Navigation
url: site-navigation
bottom:
-
title: For support in English, ask for help at <a href="https://discord.gg/ZdqEhed">ReSwitched on Discord</a>.
-
title: If you appreciate this guide, I accept <a href="donations">Donations</a>.
footer:
-
title: Source
-
title: Site Navigation
-
title: Why Ads?
sidebar_title:
-
title: Overall Progress
sidebar_pages:
-
title: Home
url: /
-
title: Get Started
url: get-started
-
title: Blocking Updates
url: blocking-updates
-
title: Game Card Update
url: game-card-update
-
title: Homebrew Launcher
url: homebrew-launcher
-
title: Multiple Options
url: multiple-options

416
_data/ui-text.yml Normal file
View File

@ -0,0 +1,416 @@
# User interface text and labels
# English (default)
# -----------------
en: &DEFAULT_EN
page : "Page"
pagination_previous : "Previous"
pagination_next : "Next"
breadcrumb_home_label : "Home"
breadcrumb_separator : "/"
menu_label : "Toggle Menu"
toc_label : "On This Page"
ext_link_label : "Direct Link"
less_than : "less than"
minute_read : "minute read"
share_on_label : "Share on"
meta_label :
tags_label : "Tags:"
categories_label : "Categories:"
date_label : "Updated:"
comments_label : "Leave a Comment"
comments_title : "Comments"
more_label : "Learn More"
related_label : "You May Also Enjoy"
follow_label : "Follow:"
feed_label : "Feed"
powered_by : "Powered by"
website_label : "Website"
email_label : "Email"
recent_posts : "Recent Posts"
undefined_wpm : "Undefined parameter words_per_minute at _config.yml"
comment_form_info : "Your email address will not be published. Required fields are marked"
comment_form_comment_label : "Comment"
comment_form_md_info : "Markdown is supported."
comment_form_name_label : "Name"
comment_form_email_label : "Email address"
comment_form_website_label : "Website (optional)"
comment_btn_submit : "Submit Comment"
comment_btn_submitted : "Submitted"
comment_success_msg : "Thanks for your comment! It will show on the site once it has been approved."
comment_error_msg : "Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again."
loading_label : "Loading..."
en-US:
<<: *DEFAULT_EN
en-CA:
<<: *DEFAULT_EN
en-GB:
<<: *DEFAULT_EN
en-AU:
<<: *DEFAULT_EN
# Spanish
# --------------
es: &DEFAULT_ES
page : "Página"
pagination_previous : "Anterior"
pagination_next : "Siguiente"
breadcrumb_home_label : "Inicio"
breadcrumb_separator : "/"
menu_label :
toc_label : "Contenidos"
ext_link_label : "Enlace"
less_than : "menos de"
minute_read : "minuto de lectura"
share_on_label : "Compartir"
meta_label :
tags_label : "Etiquetas:"
categories_label : "Categorías:"
date_label : "Actualizado:"
comments_label : "Comentar"
comments_title :
more_label : "Ver más"
related_label : "Podrías ver también"
follow_label : "Seguir:"
feed_label : "Feed"
powered_by : "Powered by"
website_label : "Sitio web"
email_label : "Email"
recent_posts : "Entradas recientes"
undefined_wpm : "Parametro words_per_minute (Palabras por minuto) no definido en _config.yml"
comment_form_info :
comment_form_comment_label :
comment_form_md_info :
comment_form_name_label :
comment_form_email_label :
comment_form_website_label :
comment_btn_submit :
comment_btn_submitted :
comment_success_msg :
comment_error_msg :
loading_label :
es-ES:
<<: *DEFAULT_ES
es-CO:
<<: *DEFAULT_ES
# French
# -----------------
fr: &DEFAULT_FR
page : "Page"
pagination_previous : "Précédent"
pagination_next : "Suivant"
breadcrumb_home_label : "Accueil"
breadcrumb_separator : "/"
menu_label :
toc_label : "Sur cette page"
ext_link_label : "Lien direct"
less_than : "plus petit que"
minute_read : "minute de lecture"
share_on_label : "Partager sur"
meta_label :
tags_label : "Tags :"
categories_label : "Catégories :"
date_label : "Mis à jour :"
comments_label : "Laisser un commentaire"
comments_title :
more_label : "Lire plus"
related_label : "Vous pourriez aimer"
follow_label : "Suivez moi"
feed_label : "Flux"
powered_by : "Propulsé par"
website_label : "Site"
email_label : "Email"
recent_posts : "Posts récents"
undefined_wpm : "Le paramètre words_per_minute n'est pas défini dans _config.yml"
comments_title : "Commentaires"
comment_form_info : "Votre adresse email ne sera pas visible. Les champs obligatoires sont marqués"
comment_form_comment_label : "Commentaire"
comment_form_md_info : "Markdown est supporté."
comment_form_name_label : "Nom"
comment_form_email_label : "Adresse mail"
comment_form_website_label : "Site web (optionnel)"
comment_btn_submit : "Envoyer"
comment_btn_submitted : "Envoyé"
comment_success_msg : "Merci pour votre comentaire, il sera visible sur le site une fois approuvé."
comment_error_msg : "Désolé, une erreur est survenue lors de la soumission. Vérifiez que les champs obligatoires ont été remplis et réessayez."
loading_label : "Chargement..."
fr-FR:
<<: *DEFAULT_FR
fr-BE:
<<: *DEFAULT_FR
fr-CH:
<<: *DEFAULT_FR
# Turkish
# -----------------
tr: &DEFAULT_TR
page : "Sayfa"
pagination_previous : "Önceki"
pagination_next : "Sonraki"
breadcrumb_home_label : "Ana Sayfa"
breadcrumb_separator : "/"
menu_label :
toc_label : "İçindekiler"
ext_link_label : "Doğrudan Bağlantı"
less_than : "Şu süreden az: "
minute_read : "dakika tahmini okuma süresi"
share_on_label : "Paylaş"
meta_label :
tags_label : "Etiketler:"
categories_label : "Kategoriler:"
date_label : "Güncelleme tarihi:"
comments_label : "Yorum yapın"
comments_title : "Yorumlar"
more_label : "Daha fazlasını öğrenin"
related_label : "Bunlar ilginizi çekebilir:"
follow_label : "Takip et:"
feed_label : "RSS"
powered_by : "Emeği geçenler: "
website_label : "Web sayfası"
email_label : "E-posta"
recent_posts : "Son yazılar"
undefined_wpm : "_config.yml dosyasında tanımlanmamış words_per_minute parametresi"
comment_form_info : "Email adresiniz gösterilmeyecektir. Zorunlu alanlar işaretlenmiştir"
comment_form_comment_label : "Yorumunuz"
comment_form_md_info : "Markdown desteklenmektedir."
comment_form_name_label : "Adınız"
comment_form_email_label : "Email adresiniz"
comment_form_website_label : "Websiteniz (opsiyonel)"
comment_btn_submit : "Yorum Yap"
comment_btn_submitted : "Gönderildi"
comment_success_msg : "Yorumunuz için teşekkürler! Yorumunuz onaylandıktan sonra sitede gösterilecektir."
comment_error_msg : "Maalesef bir hata oluştu. Lütfen zorunlu olan tüm alanları doldurduğunuzdan emin olun ve sonrasında tekrar deneyin."
loading_label : "Yükleniyor..."
tr-TR:
<<: *DEFAULT_TR
# Portuguese
# -----------------
pt: &DEFAULT_PT
page : "Página"
pagination_previous : "Anterior"
pagination_next : "Seguinte"
breadcrumb_home_label : "Início"
breadcrumb_separator : "/"
menu_label :
toc_label : "Nesta Página"
ext_link_label : "Link Direto"
less_than : "menos de"
minute_read : "minutos de leitura"
share_on_label : "Partilhar no"
meta_label :
tags_label : "Etiquetas:"
categories_label : "Categorias:"
date_label : "Atualizado:"
comments_label : "Deixe um Comentário"
comments_title : "Comentários"
more_label : "Saber mais"
related_label : "Também pode gostar de"
follow_label : "Siga:"
feed_label : "Feed"
powered_by : "Feito com"
website_label : "Site"
email_label : "Email"
recent_posts : "Artigos Recentes"
undefined_wpm : "Parâmetro words_per_minute não definido em _config.yml"
comment_form_info : "O seu endereço email não será publicado. Os campos obrigatórios estão assinalados"
comment_form_comment_label : "Comentário"
comment_form_md_info : "Markdown é suportado."
comment_form_name_label : "Nome"
comment_form_email_label : "Endereço Email"
comment_form_website_label : "Site (opcional)"
comment_btn_submit : "Sumbeter Comentário"
comment_btn_submitted : "Submetido"
comment_success_msg : "Obrigado pelo seu comentário! Será visível no site logo que aprovado."
comment_error_msg : "Lamento, ocorreu um erro na sua submissão. Por favor verifique se todos os campos obrigatórios estão corretamente preenchidos e tente novamente."
loading_label : "A carregar..."
# Brazilian Portuguese
pt-BR:
page : "Página"
pagination_previous : "Anterior"
pagination_next : "Próxima"
breadcrumb_home_label : "Home"
breadcrumb_separator : "/"
menu_label :
toc_label : "Nesta página"
ext_link_label : "Link direto"
less_than : "meno que"
minute_read : "minutos de leitura"
share_on_label : "Compartilhe em"
meta_label :
tags_label : "Tags:"
categories_label : "Categorias:"
date_label : "Atualizado em:"
comments_label : "Deixe um comentário"
comments_title :
more_label : "Aprenda Mais"
related_label : "Você Talvez Goste Também"
follow_label : "Acompanhe em"
feed_label : "Feed"
powered_by : "Feito com"
website_label : "Site"
email_label : "Email"
recent_posts : "Postagens recentes"
undefined_wpm : "Parâmetro indefinido em word_per_minute no _config.yml"
comment_form_info :
comment_form_comment_label :
comment_form_md_info :
comment_form_name_label :
comment_form_email_label :
comment_form_website_label :
comment_btn_submit :
comment_btn_submitted :
comment_success_msg :
comment_error_msg :
loading_label :
pt-PT:
<<: *DEFAULT_PT
# Italian
# -----------------
it: &DEFAULT_IT
page : "Pagina"
pagination_previous : "Precedente"
pagination_next : "Prossima"
breadcrumb_home_label : "Home"
breadcrumb_separator : "/"
menu_label :
toc_label : "Indice della pagina"
ext_link_label : "Link"
less_than : "meno di"
minute_read : "minuto/i di lettura"
share_on_label : "Condividi"
meta_label :
tags_label : "Tags:"
categories_label : "Categorie:"
date_label : "Aggiornato:"
comments_label : "Scrivi un commento"
comments_title :
more_label : "Scopri di più"
related_label : "Potrebbe Piacerti Anche"
follow_label : "Segui:"
feed_label : "Feed"
powered_by : "Powered by"
website_label : "Website"
email_label : "Email"
recent_posts : "Articoli Recenti"
undefined_wpm : "Parametro words_per_minute non definito in _config.yml"
comment_form_info : "Il tuo indirizzo email non sarà pubblicato. Sono segnati i campi obbligatori"
comment_form_comment_label : "Commenta"
comment_form_md_info : "Il linguaggio Markdown è supportato"
comment_form_name_label : "Nome"
comment_form_email_label : "Indirizzo email"
comment_form_website_label : "Sito Web (opzionale)"
comment_btn_submit : "Invia commento"
comment_btn_submitted : "Inviato"
comment_success_msg : "Grazie per il tuo commento! Verrà visualizzato nel sito una volta che sarà approvato."
comment_error_msg : "C'è stato un errore con il tuo invio. Assicurati che tutti i campi richiesti siano stati completati e riprova."
loading_label : "Caricamento..."
it-IT:
<<: *DEFAULT_IT
# Chinese (zh-CN Chinese - China)
# -----------------
zh: &DEFAULT_ZH
page : "页面"
pagination_previous : "向前"
pagination_next : "向后"
breadcrumb_home_label : "首页"
breadcrumb_separator : "/"
menu_label :
toc_label : "在本页上"
ext_link_label : "直接链接"
less_than : "少于"
minute_read : "分钟 阅读"
share_on_label : "分享"
meta_label :
tags_label : "标签:"
categories_label : "分类:"
date_label : "最新的:"
comments_label : "留下评论"
comments_title : "评论"
more_label : "了解更多"
related_label : "猜您还喜欢"
follow_label : "关注:"
feed_label : "Feed"
powered_by : "Powered by"
website_label : "网站"
email_label : "Email"
recent_posts : "最新文章"
undefined_wpm : "Undefined parameter words_per_minute at _config.yml"
comment_form_info : "Your email address will not be published. Required fields are marked"
comment_form_comment_label : "Comment"
comment_form_md_info : "Markdown is supported."
comment_form_name_label : "Name"
comment_form_email_label : "Email address"
comment_form_website_label : "Website (optional)"
comment_btn_submit : "Submit Comment"
comment_btn_submitted : "Submitted"
comment_success_msg : "Thanks for your comment! It will show on the site once it has been approved."
comment_error_msg : "Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again."
loading_label : "Loading..."
zh-CN:
<<: *DEFAULT_ZH
zh-HK:
<<: *DEFAULT_ZH
zh-SG:
<<: *DEFAULT_ZH
zh-TW:
<<: *DEFAULT_ZH
# German / Deutsch
# -----------------
de: &DEFAULT_DE
page : "Seite"
pagination_previous : "Vorherige"
pagination_next : "Nächste"
breadcrumb_home_label : "Home"
breadcrumb_separator : "/"
menu_label :
toc_label : "Auf dieser Seite"
ext_link_label : "Direkter Link"
less_than : "weniger als"
minute_read : "Minuten zum lesen"
share_on_label : "Teilen auf"
meta_label :
tags_label : "Tags:"
categories_label : "Kategorien:"
date_label : "Aktualisiert:"
comments_label : "Hinterlassen sie einen Kommentar"
comments_title : "Kommentare"
more_label : "Mehr anzeigen"
related_label : "Ihnen gefällt vielleicht auch"
follow_label : "Folgen:"
feed_label : "Feed"
powered_by : "Powered by"
website_label : "Webseite"
email_label : "E-Mail"
recent_posts : "Aktuelle Beiträge"
undefined_wpm : "Undefinierter Parameter words_per_minute in _config.yml"
comment_form_info : "Ihre E-Mail Adresse wird nicht veröffentlicht. Benötigte Felder sind markiert"
comment_form_comment_label : "Kommentar"
comment_form_md_info : "Markdown wird unterstützt."
comment_form_name_label : "Name"
comment_form_email_label : "E-Mail Addresse"
comment_form_website_label : "Webseite (optional)"
comment_btn_submit : "Kommentar absenden"
comment_btn_submitted : "Versendet"
comment_success_msg : "Danke für ihren Kommentar! Er wird auf der Seite angezeigt, nachdem er geprüft wurde."
comment_error_msg : "Entschuldigung, es gab einen Fehler. Bitte füllen sie alle benötigten Felder aus und versuchen sie es erneut."
loading_label : "Lade..."
de-DE:
<<: *DEFAULT_DE
de-AT:
<<: *DEFAULT_DE
de-CH:
<<: *DEFAULT_DE
de-BE:
<<: *DEFAULT_DE
de-LI:
<<: *DEFAULT_DE
de-LU:
<<: *DEFAULT_DE
# Another locale
# --------------

View File

@ -0,0 +1,3 @@
<!-- start custom analytics snippet -->
<!-- end custom analytics snippet -->

View File

@ -0,0 +1,9 @@
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', '{{ site.analytics.google.tracking_id }}', 'auto');
ga('send', 'pageview');
</script>

View File

@ -0,0 +1,11 @@
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', '{{ site.analytics.google.tracking_id }}']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>

12
_includes/analytics.html Normal file
View File

@ -0,0 +1,12 @@
{% if site.analytics.provider and page.analytics != false %}
{% case site.analytics.provider %}
{% when "google" %}
{% include /analytics-providers/google.html %}
{% when "google-universal" %}
{% include /analytics-providers/google-universal.html %}
{% when "custom" %}
{% include /analytics-providers/custom.html %}
{% endcase %}
{% endif %}

View File

@ -0,0 +1,38 @@
{% if post.header.teaser %}
{% capture teaser %}{{ post.header.teaser }}{% endcapture %}
{% else %}
{% assign teaser = site.teaser %}
{% endif %}
{% if post.id %}
{% assign title = post.title | markdownify | remove: "<p>" | remove: "</p>" %}
{% else %}
{% assign title = post.title %}
{% endif %}
<div class="{{ include.type | default: "list" }}__item">
<article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
{% if include.type == "grid" and teaser %}
<div class="archive__item-teaser">
<img src=
{% if teaser contains "://" %}
"{{ teaser }}"
{% else %}
"{{ teaser | absolute_url }}"
{% endif %}
alt="">
</div>
{% endif %}
<h2 class="archive__item-title" itemprop="headline">
{% if post.link %}
<a href="{{ post.link }}">{{ title }}</a> <a href="{{ post.url | absolute_url }}" rel="permalink"><i class="fa fa-link" aria-hidden="true" title="permalink"></i><span class="sr-only">Permalink</span></a>
{% else %}
<a href="{{ post.url | absolute_url }}" rel="permalink">{{ title }}</a>
{% endif %}
</h2>
{% if post.read_time %}
<p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> {% include read-time.html %}</p>
{% endif %}
{% if post.excerpt %}<p class="archive__item-excerpt" itemprop="description">{{ post.excerpt | markdownify | strip_html | truncate: 160 }}</p>{% endif %}
</article>
</div>

View File

@ -0,0 +1,7 @@
<!--
<li>
<a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
<i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
</a>
</li>
-->

View File

@ -0,0 +1,249 @@
{% if page.author and site.data.authors[page.author] %}
{% assign author = site.data.authors[page.author] %}
{% else %}
{% assign author = site.author %}
{% endif %}
<div itemscope itemtype="http://schema.org/Person">
{% if author.avatar %}
<div class="author__avatar">
{% if author.avatar contains "://" %}
<img src="{{ author.avatar }}" alt="{{ author.name }}" itemprop="image">
{% else %}
<img src="{{ author.avatar | absolute_url }}" class="author__avatar" alt="{{ author.name }}" itemprop="image">
{% endif %}
</div>
{% endif %}
<div class="author__content">
<h3 class="author__name" itemprop="name">{{ author.name }}</h3>
{% if author.bio %}
<p class="author__bio" itemprop="description">
{{ author.bio }}
</p>
{% endif %}
</div>
<div class="author__urls-wrapper">
<button class="btn btn--inverse">{{ site.data.ui-text[site.locale].follow_label | remove: ":" | default: "Follow" }}</button>
<ul class="author__urls social-icons">
{% if author.location %}
<li itemprop="homeLocation" itemscope itemtype="http://schema.org/Place">
<i class="fa fa-fw fa-map-marker" aria-hidden="true"></i> <span itemprop="name">{{ author.location }}</span>
</li>
{% endif %}
{% if author.uri %}
<li>
<a href="{{ author.uri }}" itemprop="url">
<i class="fa fa-fw fa-chain" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].website_label | default: "Website" }}
</a>
</li>
{% endif %}
{% if author.email %}
<li>
<a href="mailto:{{ author.email }}">
<meta itemprop="email" content="{{ author.email }}" />
<i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].email_label | default: "Email" }}
</a>
</li>
{% endif %}
{% if author.keybase %}
<li>
<a href="https://keybase.io/{{ author.keybase }}" itemprop="sameAs">
<i class="fa fa-fw fa-key" aria-hidden="true"></i> Keybase
</a>
</li>
{% endif %}
{% if author.twitter %}
<li>
<a href="https://twitter.com/{{ author.twitter }}" itemprop="sameAs">
<i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter
</a>
</li>
{% endif %}
{% if author.facebook %}
<li>
<a href="https://www.facebook.com/{{ author.facebook }}" itemprop="sameAs">
<i class="fa fa-fw fa-facebook-square" aria-hidden="true"></i> Facebook
</a>
</li>
{% endif %}
{% if author.google_plus %}
<li>
<a href="https://plus.google.com/+{{ author.google_plus }}" itemprop="sameAs">
<i class="fa fa-fw fa-google-plus-square" aria-hidden="true"></i> Google+
</a>
</li>
{% endif %}
{% if author.linkedin %}
<li>
<a href="https://www.linkedin.com/in/{{ author.linkedin }}" itemprop="sameAs">
<i class="fa fa-fw fa-linkedin-square" aria-hidden="true"></i> LinkedIn
</a>
</li>
{% endif %}
{% if author.xing %}
<li>
<a href="https://www.xing.com/profile/{{ author.xing }}" itemprop="sameAs">
<i class="fa fa-fw fa-xing-square" aria-hidden="true"></i> XING
</a>
</li>
{% endif %}
{% if author.instagram %}
<li>
<a href="https://instagram.com/{{ author.instagram }}" itemprop="sameAs">
<i class="fa fa-fw fa-instagram" aria-hidden="true"></i> Instagram
</a>
</li>
{% endif %}
{% if author.tumblr %}
<li>
<a href="https://{{ author.tumblr }}.tumblr.com" itemprop="sameAs">
<i class="fa fa-fw fa-tumblr-square" aria-hidden="true"></i> Tumblr
</a>
</li>
{% endif %}
{% if author.bitbucket %}
<li>
<a href="https://bitbucket.org/{{ author.bitbucket }}" itemprop="sameAs">
<i class="fa fa-fw fa-bitbucket" aria-hidden="true"></i> Bitbucket
</a>
</li>
{% endif %}
{% if author.github %}
<li>
<a href="https://github.com/{{ author.github }}" itemprop="sameAs">
<i class="fa fa-fw fa-github" aria-hidden="true"></i> GitHub
</a>
</li>
{% endif %}
{% if author.gitlab %}
<li>
<a href="https://gitlab.com/{{ author.gitlab }}" itemprop="sameAs">
<i class="fa fa-fw fa-gitlab" aria-hidden="true"></i> Gitlab
</a>
</li>
{% endif %}
{% if author.stackoverflow %}
<li>
<a href="https://www.stackoverflow.com/users/{{ author.stackoverflow }}" itemprop="sameAs">
<i class="fa fa-fw fa-stack-overflow" aria-hidden="true"></i> Stackoverflow
</a>
</li>
{% endif %}
{% if author.lastfm %}
<li>
<a href="https://last.fm/user/{{ author.lastfm }}" itemprop="sameAs">
<i class="fa fa-fw fa-lastfm-square" aria-hidden="true"></i> Last.fm
</a>
</li>
{% endif %}
{% if author.dribbble %}
<li>
<a href="https://dribbble.com/{{ author.dribbble }}" itemprop="sameAs">
<i class="fa fa-fw fa-dribbble" aria-hidden="true"></i> Dribbble
</a>
</li>
{% endif %}
{% if author.pinterest %}
<li>
<a href="https://www.pinterest.com/{{ author.pinterest }}" itemprop="sameAs">
<i class="fa fa-fw fa-pinterest" aria-hidden="true"></i> Pinterest
</a>
</li>
{% endif %}
{% if author.foursquare %}
<li>
<a href="https://foursquare.com/{{ author.foursquare }}" itemprop="sameAs">
<i class="fa fa-fw fa-foursquare" aria-hidden="true"></i> Foursquare
</a>
</li>
{% endif %}
{% if author.steam %}
<li>
<a href="https://steamcommunity.com/id/{{ author.steam }}" itemprop="sameAs">
<i class="fa fa-fw fa-steam-square" aria-hidden="true"></i> Steam
</a>
</li>
{% endif %}
{% if author.youtube %}
{% if author.youtube contains "://" %}
<li>
<a href="{{ author.youtube }}" itemprop="sameAs">
<i class="fa fa-fw fa-youtube-square" aria-hidden="true"></i> YouTube
</a>
</li>
{% else author.youtube %}
<li>
<a href="https://www.youtube.com/user/{{ author.youtube }}" itemprop="sameAs">
<i class="fa fa-fw fa-youtube-square" aria-hidden="true"></i> YouTube
</a>
</li>
{% endif %}
{% endif %}
{% if author.soundcloud %}
<li>
<a href="https://soundcloud.com/{{ author.soundcloud }}" itemprop="sameAs">
<i class="fa fa-fw fa-soundcloud" aria-hidden="true"></i> Soundcloud
</a>
</li>
{% endif %}
{% if author.weibo %}
<li>
<a href="https://www.weibo.com/{{ author.weibo }}" itemprop="sameAs">
<i class="fa fa-fw fa-weibo" aria-hidden="true"></i> Weibo
</a>
</li>
{% endif %}
{% if author.flickr %}
<li>
<a href="https://www.flickr.com/{{ author.flickr }}" itemprop="sameAs">
<i class="fa fa-fw fa-flickr" aria-hidden="true"></i> Flickr
</a>
</li>
{% endif %}
{% if author.codepen %}
<li>
<a href="https://codepen.io/{{ author.codepen }}" itemprop="sameAs">
<i class="fa fa-fw fa-codepen" aria-hidden="true"></i> CodePen
</a>
</li>
{% endif %}
{% if author.vine %}
<li>
<a href="https://vine.co/u/{{ author.vine }}" itemprop="sameAs">
<i class="fa fa-fw fa-vine" aria-hidden="true"></i> Vine
</a>
</li>
{% endif %}
{% include author-profile-custom-links.html %}
</ul>
</div>
</div>

5
_includes/base_path Normal file
View File

@ -0,0 +1,5 @@
{% if site.url %}
{% assign base_path = site.url | append: site.baseurl %}
{% else %}
{% assign base_path = site.github.url %}
{% endif %}

View File

@ -0,0 +1,39 @@
{% case site.category_archive.type %}
{% when "liquid" %}
{% assign path_type = "#" %}
{% when "jekyll-archives" %}
{% assign path_type = nil %}
{% endcase %}
{% if page.collection != 'posts' %}
{% assign path_type = nil %}
{% assign crumb_path = '/' %}
{% else %}
{% assign crumb_path = site.category_archive.path %}
{% endif %}
<nav class="breadcrumbs">
<ol itemscope itemtype="http://schema.org/BreadcrumbList">
{% assign crumbs = page.url | split: '/' %}
{% assign i = 1 %}
{% for crumb in crumbs offset: 1 %}
{% if forloop.first %}
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
<a href="{{ site.url }}{{ site.baseurl }}/" itemprop="item"><span itemprop="name">{{ site.data.ui-text[site.locale].breadcrumb_home_label | default: "Home" }}</span></a>
<meta itemprop="position" content="{{ i }}" />
</li>
<span class="sep">{{ site.data.ui-text[site.locale].breadcrumb_separator | default: "/" }}</span>
{% endif %}
{% if forloop.last %}
<li class="current">{{ page.title }}</li>
{% else %}
{% assign i = i | plus: 1 %}
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
<a href="{{ crumb | downcase | replace: '%20', '-' | prepend: path_type | prepend: crumb_path | absolute_url }}" itemprop="item"><span itemprop="name">{{ crumb | replace: '-', ' ' | replace: '%20', ' ' | capitalize }}</span></a>
<meta itemprop="position" content="{{ i }}" />
</li>
<span class="sep">{{ site.data.ui-text[site.locale].breadcrumb_separator | default: "/" }}</span>
{% endif %}
{% endfor %}
</ol>
</nav>

View File

@ -0,0 +1,3 @@
<!--[if lt IE 9]>
<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
<![endif]-->

View File

@ -0,0 +1,26 @@
{% case site.category_archive.type %}
{% when "liquid" %}
{% assign path_type = "#" %}
{% when "jekyll-archives" %}
{% assign path_type = nil %}
{% endcase %}
{% if site.category_archive.path %}
{% comment %}
<!-- Sort alphabetically regardless of case e.g. a B c d E -->
<!-- modified from http://www.codeofclimber.ru/2015/sorting-site-tags-in-jekyll/ -->
{% endcomment %}
{% capture page_categories %}{% for category in page.categories %}{{ category | downcase }}#{{ category }}{% unless forloop.last %},{% endunless %}{% endfor %}{% endcapture %}
{% assign category_hashes = page_categories | split: ',' | sort %}
<p class="page__taxonomy">
<strong><i class="fa fa-fw fa-folder-open" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].categories_label | default: "Categories:" }} </strong>
<span itemprop="keywords">
{% for hash in category_hashes %}
{% assign keyValue = hash | split: '#' %}
{% capture category_word %}{{ keyValue[1] | strip_newlines }}{% endcapture %}
<a href="{{ category_word | slugify | prepend: path_type | prepend: site.category_archive.path | absolute_url }}" class="page__taxonomy-item" rel="tag">{{ category_word }}</a>{% unless forloop.last %}<span class="sep">, </span>{% endunless %}
{% endfor %}
</span>
</p>
{% endif %}

22
_includes/comment.html Normal file
View File

@ -0,0 +1,22 @@
<article id="comment{{ include.index }}" class="js-comment comment" itemprop="comment" itemscope itemtype="http://schema.org/Comment">
<div class="comment__avatar-wrapper">
<img class="comment__avatar" src="https://www.gravatar.com/avatar/{{ include.email }}?d=mm&s=80" alt="{{ include.name }}">
</div>
<div class="comment__content-wrapper">
<h3 class="comment__author" itemprop="author" itemscope itemtype="http://schema.org/Person">
{% unless include.url == blank %}
<span itemprop="name"><a rel="external nofollow" itemprop="url" href="{{ include.url }}">{{ include.name }}</a></span>
{% else %}
<span itemprop="name">{{ include.name }}</span>
{% endunless %}
</h3>
<p class="comment__date">
{% if include.date %}
{% if include.index %}<a href="#comment{{ include.index }}" itemprop="url">{% endif %}
<time datetime="{{ include.date | date_to_xmlschema }}" itemprop="datePublished">{{ include.date | date: "%B %d, %Y at %I:%M %p" }}</time>
{% if include.index %}</a>{% endif %}
{% endif %}
</p>
<div itemprop="text">{{ include.message | markdownify }}</div>
</div>
</article>

View File

@ -0,0 +1,3 @@
<!-- start custom comments snippet -->
<!-- end custom comments snippet -->

View File

@ -0,0 +1,13 @@
{% if site.comments.discourse.server %}
{% capture canonical %}{% if site.permalink contains '.html' %}{{ page.url | absolute_url }}{% else %}{{ page.url | absolute_url | remove:'index.html' | strip_slash }}{% endif %}{% endcapture %}
<script type="text/javascript">
DiscourseEmbed = { discourseUrl: '//{{ site.comments.discourse.server }}/',
discourseEmbedUrl: '{{ canonical }}' };
(function () {
var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
})();
</script>
<noscript>Please enable JavaScript to view the comments powered by <a href="https://www.discourse.org/">Discourse.</a></noscript>
{% endif %}

View File

@ -0,0 +1,15 @@
{% if site.comments.disqus.shortname %}
<script>
var disqus_config = function () {
this.page.url = "{{ page.url | absolute_url }}"; // Replace PAGE_URL with your page's canonical URL variable
this.page.identifier = "{{ page.id }}"; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
};
(function() { // DON'T EDIT BELOW THIS LINE
var d = document, s = d.createElement('script');
s.src = 'https://{{ site.comments.disqus.shortname }}.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
{% endif %}

View File

@ -0,0 +1,8 @@
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.5{% if site.comments.facebook.appid %}&appId={{ site.comments.facebook.appid }}{% endif %}";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

View File

@ -0,0 +1,2 @@
<script async type="text/javascript" src="//apis.google.com/js/plusone.js?callback=gpcb"></script>
<noscript>Please enable JavaScript to view the <a href="https://plus.google.com/">comments powered by Google+.</a></noscript>

View File

@ -0,0 +1,16 @@
{% if site.comments.provider and page.comments %}
{% case site.comments.provider %}
{% when "disqus" %}
{% include /comments-providers/disqus.html %}
{% when "discourse" %}
{% include /comments-providers/discourse.html %}
{% when "facebook" %}
{% include /comments-providers/facebook.html %}
{% when "google-plus" %}
{% include /comments-providers/google-plus.html %}
{% when "staticman" %}
{% include /comments-providers/staticman.html %}
{% when "custom" %}
{% include /comments-providers/custom.html %}
{% endcase %}
{% endif %}

View File

@ -0,0 +1,42 @@
{% if site.repository and site.staticman.branch %}
<script>
(function ($) {
var $comments = $('.js-comments');
$('#new_comment').submit(function () {
var form = this;
$(form).addClass('disabled');
$('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> {{ site.data.ui-text[site.locale].loading_label | default: "Loading..." }}');
$.ajax({
type: $(this).attr('method'),
url: $(this).attr('action'),
data: $(this).serialize(),
contentType: 'application/x-www-form-urlencoded',
success: function (data) {
$('#comment-form-submit').html('{{ site.data.ui-text[site.locale].comment_btn_submitted | default: "Submitted" }}');
$('.page__comments-form .js-notice').removeClass('notice--danger');
$('.page__comments-form .js-notice').addClass('notice--success');
showAlert('{{ site.data.ui-text[site.locale].comment_success_msg | default: "Thanks for your comment! It will show on the site once it has been approved." }}');
},
error: function (err) {
console.log(err);
$('#comment-form-submit').html('{{ site.data.ui-text[site.locale].comment_btn_submit | default: "Submit Comment" }}');
$('.page__comments-form .js-notice').removeClass('notice--success');
$('.page__comments-form .js-notice').addClass('notice--danger');
showAlert('{{ site.data.ui-text[site.locale].comment_error_msg | default: "Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again." }}');
$(form).removeClass('disabled');
}
});
return false;
});
function showAlert(message) {
$('.page__comments-form .js-notice').removeClass('hidden');
$('.page__comments-form .js-notice-text').html(message);
}
})(jQuery);
</script>
{% endif %}

97
_includes/comments.html Normal file
View File

@ -0,0 +1,97 @@
<div class="page__comments">
{% capture comments_label %}{{ site.data.ui-text[site.locale].comments_label | default: "Comments" }}{% endcapture %}
{% case site.comments.provider %}
{% when "discourse" %}
<h4 class="page__comments-title">{{ comments_label }}</h4>
<section id="discourse-comments"></section>
{% when "disqus" %}
<h4 class="page__comments-title">{{ comments_label }}</h4>
<section id="disqus_thread"></section>
{% when "facebook" %}
<h4 class="page__comments-title">{{ comments_label }}</h4>
<section class="fb-comments" data-href="{{ page.url | absolute_url }}" data-mobile="true" data-num-posts="{{ site.comments.facebook.num_posts | default: 5 }}" data-width="100%" data-colorscheme="{{ site.comments.facebook.colorscheme | default: 'light' }}"></section>
{% when "google-plus" %}
<h4 class="page__comments-title">{{ comments_label }}</h4>
<section id="g-comments" class="g-comments">Loading Google+ Comments ...</section>
<script>
function initComment() {
gapi.comments.render("g-comments", {
href: "{{ page.url | absolute_url }}",
width: "624",
first_party_property: "BLOGGER",
view_type: "FILTERED_POSTMOD"
})
}
</script>
<script async type="text/javascript" src="https://apis.google.com/js/plusone.js" onload="initComment()" />
<noscript>Please enable JavaScript to view the <a href="https://plus.google.com/">comments powered by Google+.</a></noscript>-->
{% when "staticman" %}
<section id="static-comments">
{% if site.repository and site.staticman.branch %}
<!-- Start static comments -->
<div class="js-comments">
{% if site.data.comments[page.slug] %}
<h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_title | default: "Comments" }}</h4>
{% assign comments = site.data.comments[page.slug] | sort %}
{% for comment in comments %}
{% assign email = comment[1].email %}
{% assign name = comment[1].name %}
{% assign url = comment[1].url %}
{% assign date = comment[1].date %}
{% assign message = comment[1].message %}
{% include comment.html index=forloop.index email=email name=name url=url date=date message=message %}
{% endfor %}
{% endif %}
</div>
<!-- End static comments -->
<!-- Start new comment form -->
<div class="page__comments-form">
<h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_label | default: "Leave a Comment" }}</h4>
<p class="small">{{ site.data.ui-text[site.locale].comment_form_info | default: "Your email address will not be published. Required fields are marked" }} <span class="required">*</span></p>
<form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/{{ site.repository }}/{{ site.staticman.branch }}">
<div class="form__spinner">
<i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
<span class="sr-only">{{ site.data.ui-text[site.locale].loading_label | default: "Loading..." }}</span>
</div>
<fieldset>
<label for="comment-form-message">{{ site.data.ui-text[site.locale].comment_form_comment_label | default: "Comment" }} <small class="required">*</small></label>
<textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
<div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">{{ site.data.ui-text[site.locale].comment_form_md_info | default: "Markdown is supported." }}</a></div>
</fieldset>
<fieldset>
<label for="comment-form-name">{{ site.data.ui-text[site.locale].comment_form_name_label | default: "Name" }} <small class="required">*</small></label>
<input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
</fieldset>
<fieldset>
<label for="comment-form-email">{{ site.data.ui-text[site.locale].comment_form_email_label | default: "Email address" }} <small class="required">*</small></label>
<input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
</fieldset>
<fieldset>
<label for="comment-form-url">{{ site.data.ui-text[site.locale].comment_form_website_label | default: "Website (optional)" }}</label>
<input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
</fieldset>
<fieldset class="hidden" style="display: none;">
<input type="hidden" name="options[slug]" value="{{ page.slug }}">
<label for="comment-form-location">Not used. Leave blank if you are a human.</label>
<input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
</fieldset>
<!-- Start comment form alert messaging -->
<p class="hidden js-notice">
<strong class="js-notice-text"></strong>
</p>
<!-- End comment form alert messaging -->
<fieldset>
<button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--primary btn--large">{{ site.data.ui-text[site.locale].comment_btn_submit | default: "Submit Comment" }}</button>
</fieldset>
</form>
</div>
<!-- End new comment form -->
{% endif %}
</section>
{% when "custom" %}
<section id="custom-comments"></section>
{% endcase %}
</div>

50
_includes/feature_row Normal file
View File

@ -0,0 +1,50 @@
{% if include.id %}
{% assign feature_row = page[include.id] %}
{% else %}
{% assign feature_row = page.feature_row %}
{% endif %}
<div class="feature__wrapper">
{% for f in feature_row %}
{% if f.url contains "://" %}
{% capture f_url %}{{ f.url }}{% endcapture %}
{% else %}
{% capture f_url %}{{ f.url | absolute_url }}{% endcapture %}
{% endif %}
<div class="feature__item{% if include.type %}--{{ include.type }}{% endif %}">
<div class="archive__item">
{% if f.image_path %}
<div class="archive__item-teaser">
<img src=
{% if f.image_path contains "://" %}
"{{ f.image_path }}"
{% else %}
"{{ f.image_path | absolute_url }}"
{% endif %}
alt="{% if f.alt %}{{ f.alt }}{% endif %}">
</div>
{% endif %}
<div class="archive__item-body">
{% if f.title %}
<h2 class="archive__item-title">{{ f.title }}</h2>
{% endif %}
{% if f.excerpt %}
<div class="archive__item-excerpt">
{{ f.excerpt | markdownify }}
</div>
{% endif %}
{% if f.url %}
<p><a href="{{ f_url }}" class="btn {{ f.btn_class }}">{{ f.btn_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}</a></p>
{% endif %}
</div>
</div>
</div>
{% endfor %}
</div>

12
_includes/figure Normal file
View File

@ -0,0 +1,12 @@
<figure class="{{ include.class }}">
<img src=
{% if include.image_path contains "://" %}
"{{ include.image_path }}"
{% else %}
"{{ include.image_path | absolute_url }}"
{% endif %}
alt="{% if include.alt %}{{ include.alt }}{% endif %}">
{% if include.caption %}
<figcaption>{{ include.caption | markdownify | remove: "<p>" | remove: "</p>" }}</figcaption>
{% endif %}
</figure>

6
_includes/footer.html Normal file
View File

@ -0,0 +1,6 @@
{% include base_path %}
{% assign split_path = page.path | split: "/" %}
{% assign locale = split_path[1] %}
{% assign titles = site.data.navigation[locale].footer %}
<div class="page__footer-copyright">&copy; {{ site.time | date: '%Y' }} {{ site.name | default: site.title }} - <a href="https://github.com/Plailect/Guide_Switch">{{ titles[0].title }}</a> - <a href="site-navigation">{{ titles[1].title }}</a> - <a href="why-ads">{{ titles[2].title }}</a>

View File

@ -0,0 +1,3 @@
<!-- start custom footer snippets -->
<!-- end custom footer snippets -->

47
_includes/gallery Normal file
View File

@ -0,0 +1,47 @@
{% if include.id %}
{% assign gallery = page[include.id] %}
{% else %}
{% assign gallery = page.gallery %}
{% endif %}
{% if gallery.size == 2 %}
{% assign gallery_layout = 'half' %}
{% elsif gallery.size >= 3 %}
{% assign gallery_layout = 'third' %}
{% else %}
{% assign gallery_layout = '' %}
{% endif %}
<figure class="{{ gallery_layout }} {{ include.class }}">
{% for img in gallery %}
{% if img.url %}
<a href=
{% if img.url contains "://" %}
"{{ img.url }}"
{% else %}
"{{ img.url | absolute_url }}"
{% endif %}
{% if img.title %}title="{{ img.title }}"{% endif %}
>
<img src=
{% if img.image_path contains "://" %}
"{{ img.image_path }}"
{% else %}
"{{ img.image_path | absolute_url }}"
{% endif %}
alt="{% if img.alt %}{{ img.alt }}{% endif %}">
</a>
{% else %}
<img src=
{% if img.image_path contains "://" %}
"{{ img.image_path }}"
{% else %}
"{{ img.image_path | absolute_url }}"
{% endif %}
alt="{% if img.alt %}{{ img.alt }}{% endif %}">
{% endif %}
{% endfor %}
{% if include.caption %}
<figcaption>{{ include.caption | markdownify | remove: "<p>" | remove: "</p>" }}</figcaption>
{% endif %}
</figure>

47
_includes/group-by-array Normal file
View File

@ -0,0 +1,47 @@
<!--
# Jekyll Group-By-Array 0.1.0
# https://github.com/mushishi78/jekyll-group-by-array
# © 2015 Max White <mushishi78@gmail.com>
# MIT License
-->
<!-- Initialize -->
{% assign __empty_array = '' | split: ',' %}
{% assign group_names = __empty_array %}
{% assign group_items = __empty_array %}
<!-- Map -->
{% assign __names = include.collection | map: include.field %}
<!-- Flatten -->
{% assign __names = __names | join: ',' | join: ',' | split: ',' %}
<!-- Uniq -->
{% assign __names = __names | sort %}
{% for name in __names %}
<!-- If not equal to previous then it must be unique as sorted -->
{% unless name == previous %}
<!-- Push to group_names -->
{% assign group_names = group_names | push: name %}
{% endunless %}
{% assign previous = name %}
{% endfor %}
<!-- group_items -->
{% for name in group_names %}
<!-- Collect if contains -->
{% assign __item = __empty_array %}
{% for __element in include.collection %}
{% if __element[include.field] contains name %}
{% assign __item = __item | push: __element %}
{% endif %}
{% endfor %}
<!-- Push to group_items -->
{% assign group_items = group_items | push: __item %}
{% endfor %}

43
_includes/head.html Normal file
View File

@ -0,0 +1,43 @@
<meta charset="utf-8">
{% include seo.html %}
<link href="{% if site.atom_feed.path %}{{ site.atom_feed.path }}{% else %}{{ '/feed.xml' | absolute_url }}{% endif %}" type="application/atom+xml" rel="alternate" title="{{ site.title }} Feed">
<!-- http://t.co/dKP3o1e -->
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script>
document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
</script>
<!-- For all browsers -->
<link rel="stylesheet" href="{{ '/assets/css/main.css' | absolute_url }}">
<!--[if lte IE 9]>
<style>
/* old IE unsupported flexbox fixes */
.greedy-nav .site-title {
padding-right: 3em;
}
.greedy-nav button {
position: absolute;
top: 0;
right: 0;
height: 100%;
}
</style>
<![endif]-->
{% if site.head_scripts %}
{% for script in site.head_scripts %}
{% if script contains "://" %}
{% capture script_path %}{{ script }}{% endcapture %}
{% else %}
{% capture script_path %}{{ script | absolute_url }}{% endcapture %}
{% endif %}
<script src="{{ script_path }}"></script>
{% endfor %}
{% endif %}

View File

@ -0,0 +1,19 @@
<!-- start custom head snippets -->
{% include base_path %}
<!-- insert favicons. use http://realfavicongenerator.net/ -->
<link rel="apple-touch-icon" sizes="180x180" href="{{ base_path }}/images/apple-touch-icon.png?v=PYEmwKvQAx">
<link rel="icon" type="image/png" href="{{ base_path }}/images/favicon-32x32.png?v=PYEmwKvQAx" sizes="32x32">
<link rel="icon" type="image/png" href="{{ base_path }}/images/favicon-194x194.png?v=PYEmwKvQAx" sizes="194x194">
<link rel="icon" type="image/png" href="{{ base_path }}/images/android-chrome-192x192.png?v=PYEmwKvQAx" sizes="192x192">
<link rel="icon" type="image/png" href="{{ base_path }}/images/favicon-16x16.png?v=PYEmwKvQAx" sizes="16x16">
<link rel="manifest" href="{{ base_path }}/images/manifest.json?v=PYEmwKvQAx">
<link rel="mask-icon" href="{{ base_path }}/images/safari-pinned-tab.svg?v=PYEmwKvQAx" color="#2E3440">
<link rel="shortcut icon" href="{{ base_path }}/images/favicon.ico?v=PYEmwKvQAx">
<meta name="apple-mobile-web-app-title" content="Guide">
<meta name="application-name" content="Guide">
<meta name="msapplication-TileColor" content="#2E3440">
<meta name="msapplication-TileImage" content="{{ base_path }}/images/mstile-144x144.png?v=PYEmwKvQAx">
<meta name="msapplication-config" content="{{ base_path }}/images/browserconfig.xml?v=PYEmwKvQAx">
<meta name="theme-color" content="#2E3440">
<!-- end custom head snippets -->

71
_includes/masthead.html Normal file
View File

@ -0,0 +1,71 @@
<div class="masthead">
<div class="masthead__inner-wrap">
<div class="masthead__menu">
<nav id="site-nav" class="greedy-nav">
<ul class="visible-links">
{% assign split_path = page.path | split: "/" %}
{% assign locale = split_path[1] %}
{% assign titles = site.data.navigation[locale].main %}
{% if locale == 'en_US' %}
{% assign locale_var = '/' %}
{% else %}
{% assign locale_var = locale | prepend:'/' | append:'/' %}
{% endif %}
{% for link in site.data.navigation[locale].main %}
{% if link.url == "/" %}
<li class="masthead__menu-item masthead__menu-item--lg"><a href="{{ domain }}{{ locale_var }}">{{ link.title }}</a></li>
{% else %}
<li class="masthead__menu-item"><a href="{{ domain }}{{ locale_var }}{{ link.url }}">{{ link.title }}</a></li>
{% endif %}
{% endfor %}
</ul>
<ul class="hidden-links links-menu hidden"></ul>
<ul class="hidden-links lang-menu hidden">
{% assign split_url = page.url | split: "/" %}
{% if split_url.size == 3 %}
{% assign langless_url = split_url[2] %}
{% else %}
{% assign langless_url = split_url[1] %}
{% endif %}
{% if langless_url == "index.html" %}
{% assign langless_url = "" %}
{% endif %}
<li class="masthead__menu-item"><a href="{{ site.url }}/{{ langless_url }}">English</a></li>
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/es_ES/{{ langless_url }}">Español</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/de_DE/{{ langless_url }}">Deutsch</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/fr_FR/{{ langless_url }}">Français</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/it_IT/{{ langless_url }}">Italiano</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/nl_NL/{{ langless_url }}">Nederlands</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/pt_BR/{{ langless_url }}">Português do Brasil</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/pt_PT/{{ langless_url }}">Português (Portugal)</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/ru_RU/{{ langless_url }}">Русский</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/zh_CN/{{ langless_url }}">简体中文</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/zh_TW/{{ langless_url }}">繁體中文</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/pl_PL/{{ langless_url }}">Polski</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/tr_TR/{{ langless_url }}">Türkçe</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/vi_VN/{{ langless_url }}">Tiếng Việt</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/ca_ES/{{ langless_url }}">Català</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/el_GR/{{ langless_url }}">Ελληνικά</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/he_IL/{{ langless_url }}">עברית‎</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/sv_SE/{{ langless_url }}">Svenska</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/ko_KR/{{ langless_url }}">한국어</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/no_NO/{{ langless_url }}">Norsk</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/ja_JP/{{ langless_url }}">日本語</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/ar_SA/{{ langless_url }}">اللغة العربية</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/hu_HU/{{ langless_url }}">Magyar</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/ro_RO/{{ langless_url }}">Română</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/sr_SP/{{ langless_url }}">Српски</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/af_ZA/{{ langless_url }}">Afrikaans</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/ms_MY/{{ langless_url }}">Bahasa Melayu</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/fi_FI/{{ langless_url }}">Suomi</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/da_DK/{{ langless_url }}">Dansk</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/uk_UA/{{ langless_url }}">Українська</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/cs_CZ/{{ langless_url }}">Čeština</a></li> -->
<!-- <li class="masthead__menu-item"><a href="{{ site.url }}/en_PT/{{ langless_url }}">Pirate English</a></li> -->
</ul>
<button class="navsel"><div class="navicon"></div></button>
<button class="langsel"><div class="langicon"><i class="fa fa-language fa-lg" aria-hidden="true"></i></div></button>
</nav>
</div>
</div>
</div>

32
_includes/nav_list Normal file
View File

@ -0,0 +1,32 @@
{% assign split_path = page.path | split: "/" %}
{% assign locale = split_path[1] %}
{% if locale == 'en_US' %}
{% assign locale_var = '/' %}
{% else %}
{% assign locale_var = locale | prepend:'/' | append:'/' %}
{% endif %}
{% assign title = site.data.navigation[locale].sidebar_title %}
{% assign navigation = site.data.navigation[locale].sidebar_pages %}
<nav class="nav__list">
{% if page.sidebar.title %}<h3 class="nav__title" style="padding-left: 0;">{{ page.sidebar.title }}</h3>{% endif %}
<input id="ac-toc" name="accordion-toc" type="checkbox" />
<label for="ac-toc">{{ site.data.ui-text[site.locale].menu_label | default: "Toggle Menu" }}</label>
<ul class="nav__items">
<li>
<span class="nav__sub-title">{{ title[0].title }}</span>
<ol>
{% for link in site.data.navigation[locale].sidebar_pages %}
{% if link.url == "/" %}
<li style="display: none;" data-name="home"><a href='{{ domain }}{{ locale_var }}'>{{ link.title }}</a></li>
{% elsif link.url == "multiple-options" %}
<li style="display: none;" data-name="multiple-options"><i>({{ link.title }})</i></li>
{% else %}
<li style="display: none;" data-name="{{ site.data.navigation.en_US.sidebar_pages[forloop.index0].url }}"><a href='{{ domain }}{{ locale_var }}{{ link.url }}'>{{ link.title }}</a></li>
{% endif %}
{% endfor %}
</ol>
</li>
</ul>
</nav>

61
_includes/page__hero.html Normal file
View File

@ -0,0 +1,61 @@
{% if page.header.image contains "://" %}
{% capture img_path %}{{ page.header.image }}{% endcapture %}
{% else %}
{% capture img_path %}{{ page.header.image | absolute_url }}{% endcapture %}
{% endif %}
{% if page.header.cta_url contains "://" %}
{% capture cta_path %}{{ page.header.cta_url }}{% endcapture %}
{% else %}
{% capture cta_path %}{{ page.header.cta_url | absolute_url }}{% endcapture %}
{% endif %}
{% if page.header.overlay_image contains "://" %}
{% capture overlay_img_path %}{{ page.header.overlay_image }}{% endcapture %}
{% elsif page.header.overlay_image %}
{% capture overlay_img_path %}{{ page.header.overlay_image | absolute_url }}{% endcapture %}
{% endif %}
{% if page.header.overlay_filter contains "rgba" %}
{% capture overlay_filter %}{{ page.header.overlay_filter }}{% endcapture %}
{% elsif page.header.overlay_filter %}
{% capture overlay_filter %}rgba(0, 0, 0, {{ page.header.overlay_filter }}){% endcapture %}
{% endif %}
{% if page.header.image_description %}
{% assign image_description = page.header.image_description %}
{% else %}
{% assign image_description = page.title %}
{% endif %}
{% assign image_description = image_description | markdownify | strip_html | strip_newlines | escape_once %}
<div class="page__hero{% if page.header.overlay_color or page.header.overlay_image %}--overlay{% endif %}"
style="{% if page.header.overlay_color %}background-color: {{ page.header.overlay_color | default: 'transparent' }};{% endif %} {% if overlay_img_path %}background-image: {% if overlay_filter %}linear-gradient({{ overlay_filter }}, {{ overlay_filter }}), {% endif %}url('{{ overlay_img_path }}');{% endif %}"
>
{% if page.header.overlay_color or page.header.overlay_image %}
<div class="wrapper">
<h1 class="page__title" itemprop="headline">
{% if paginator and site.paginate_show_page_num %}
{{ site.title }}{% unless paginator.page == 1 %} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %}
{% else %}
{{ page.title | default: site.title | markdownify | remove: "<p>" | remove: "</p>" }}
{% endif %}
</h1>
{% if page.excerpt %}
<p class="page__lead">{{ page.excerpt | markdownify | remove: "<p>" | remove: "</p>" }}</p>
{% endif %}
{% if site.read_time and page.read_time %}
<p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> {% include read-time.html %}</p>
{% endif %}
{% if page.header.cta_url %}
<p><a href="{{ cta_path }}" class="btn btn--light-outline btn--large">{{ page.header.cta_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}</a></p>
{% endif %}
</div>
{% else %}
<img src="{{ img_path }}" alt="{{ image_description }}" class="page__hero-image">
{% endif %}
{% if page.header.caption %}
<span class="page__hero-caption">{{ page.header.caption | markdownify | remove: "<p>" | remove: "</p>" }}</span>
{% endif %}
</div>

View File

@ -0,0 +1,4 @@
{% capture video_id %}{{ page.header.video.id }}{% endcapture %}
{% capture video_provider %}{{ page.header.video.provider }}{% endcapture %}
{% include video id=video_id provider=video_provider %}

View File

@ -0,0 +1,7 @@
{% if site.tag_archive.type and page.tags[0] %}
{% include tag-list.html %}
{% endif %}
{% if site.category_archive.type and page.categories[0] %}
{% include category-list.html %}
{% endif %}

69
_includes/paginator.html Normal file
View File

@ -0,0 +1,69 @@
{% if paginator.total_pages > 1 %}
<nav class="pagination">
{% assign first_page_path = site.paginate_path | replace: 'page:num', '' | replace: '//', '/' | absolute_url %}
<ul>
{% comment %} Link for previous page {% endcomment %}
{% if paginator.previous_page %}
{% if paginator.previous_page == 1 %}
<li><a href="{{ first_page_path }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
{% else %}
<li><a href="{{ site.paginate_path | replace: ':num', paginator.previous_page | replace: '//', '/' | absolute_url }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
{% endif %}
{% else %}
<li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</span></a></li>
{% endif %}
{% comment %} First page {% endcomment %}
{% if paginator.page == 1 %}
<li><a href="#" class="disabled current">1</a></li>
{% else %}
<li><a href="{{ first_page_path }}">1</a></li>
{% endif %}
{% assign page_start = 2 %}
{% if paginator.page > 4 %}
{% assign page_start = paginator.page | minus: 2 %}
{% comment %} Ellipsis for truncated links {% endcomment %}
<li><a href="#" class="disabled">&hellip;</a></li>
{% endif %}
{% assign page_end = paginator.total_pages | minus: 1 %}
{% assign pages_to_end = paginator.total_pages | minus: paginator.page %}
{% if pages_to_end > 4 %}
{% assign page_end = paginator.page | plus: 2 %}
{% endif %}
{% for index in (page_start..page_end) %}
{% if index == paginator.page %}
<li><a href="{{ site.paginate_path | replace: ':num', index | replace: '//', '/' | absolute_url }}" class="disabled current">{{ index }}</a></li>
{% else %}
{% comment %} Distance from current page and this link {% endcomment %}
{% assign dist = paginator.page | minus: index %}
{% if dist < 0 %}
{% comment %} Distance must be a positive value {% endcomment %}
{% assign dist = 0 | minus: dist %}
{% endif %}
<li><a href="{{ site.paginate_path | replace: ':num', index | absolute_url }}">{{ index }}</a></li>
{% endif %}
{% endfor %}
{% comment %} Ellipsis for truncated links {% endcomment %}
{% if pages_to_end > 3 %}
<li><a href="#" class="disabled">&hellip;</a></li>
{% endif %}
{% if paginator.page == paginator.total_pages %}
<li><a href="#" class="disabled current">{{ paginator.page }}</a></li>
{% else %}
<li><a href="{{ site.paginate_path | replace: ':num', paginator.total_pages | replace: '//', '/' | absolute_url }}">{{ paginator.total_pages }}</a></li>
{% endif %}
{% comment %} Link next page {% endcomment %}
{% if paginator.next_page %}
<li><a href="{{ site.paginate_path | replace: ':num', paginator.next_page | replace: '//', '/' | absolute_url }}">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a></li>
{% else %}
<li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</span></a></li>
{% endif %}
</ul>
</nav>
{% endif %}

View File

@ -0,0 +1,14 @@
{% if page.previous or page.next %}
<nav class="pagination">
{% if page.previous %}
<a href="{{ page.previous.url | absolute_url }}" class="pagination--pager" title="{{ page.previous.title | markdownify | strip_html }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a>
{% else %}
<a href="#" class="pagination--pager disabled">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a>
{% endif %}
{% if page.next %}
<a href="{{ page.next.url | absolute_url }}" class="pagination--pager" title="{{ page.next.title | markdownify | strip_html }}">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a>
{% else %}
<a href="#" class="pagination--pager disabled">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a>
{% endif %}
</nav>
{% endif %}

15
_includes/read-time.html Normal file
View File

@ -0,0 +1,15 @@
{% assign words_per_minute = site.words_per_minute | default: 200 %}
{% if post.read_time %}
{% assign words = post.content | strip_html | number_of_words %}
{% elsif page.read_time %}
{% assign words = page.content | strip_html | number_of_words %}
{% endif %}
{% if words < words_per_minute %}
{{ site.data.ui-text[site.locale].less_than | default: "less than" }} 1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
{% elsif words == words_per_minute %}
1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
{% else %}
{{ words | divided_by:words_per_minute }} {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
{% endif %}

15
_includes/scripts.html Normal file
View File

@ -0,0 +1,15 @@
{% if site.footer_scripts %}
{% for script in site.footer_scripts %}
{% if script contains "://" %}
{% capture script_path %}{{ script }}{% endcapture %}
{% else %}
{% capture script_path %}{{ script | absolute_url }}{% endcapture %}
{% endif %}
<script src="{{ script_path }}"></script>
{% endfor %}
{% else %}
<script src="{{ '/assets/js/main.min.js' | absolute_url }}"></script>
{% endif %}
{% include analytics.html %}
{% include /comments-providers/scripts.html %}

147
_includes/seo.html Normal file
View File

@ -0,0 +1,147 @@
<!-- begin SEO -->
{% if site.url %}
{% assign seo_url = site.url | append: site.baseurl %}
{% endif %}
{% assign seo_url = seo_url | default: site.github.url %}
{% if page.title %}
{% assign seo_title = page.title | append: " " | append: site.title_separator | append: " " | append: site.title %}
{% endif %}
{% if seo_title %}
{% assign seo_title = seo_title | markdownify | strip_html | strip_newlines | escape_once %}
{% endif %}
{% if site.url %}
{% assign canonical_url = page.url | replace: "index.html", "" | prepend: site.url %}
{% endif %}
<title>{{ seo_title | default: site.title }}{% if paginator %}{% unless paginator.page == 1 %} {{ site.title_separator }} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %}{% endif %}</title>
{% assign seo_description = page.description | default: page.excerpt | default: site.description %}
{% if seo_description %}
{% assign seo_description = seo_description | markdownify | strip_html | strip_newlines | escape_once %}
{% endif %}
<meta name="description" content="{{ seo_description }}">
{% assign seo_author = page.author | default: page.author[0] | default: site.author.name %}
{% if seo_author %}
{% if seo_author.twitter %}
{% assign seo_author_twitter = seo_author.twitter %}
{% else %}
{% if site.data.authors and site.data.authors[seo_author] %}
{% assign seo_author_twitter = site.data.authors[seo_author].twitter %}
{% else %}
{% assign seo_author_twitter = seo_author %}
{% endif %}
{% endif %}
{% assign seo_author_twitter = seo_author_twitter | replace: "@", "" %}
{% endif %}
<meta name="author" content="{{ seo_author }}">
<meta property="og:locale" content="{{ site.locale | replace: "-", "_" | default: "en_US" }}">
<meta property="og:site_name" content="{{ site.title }}">
<meta property="og:title" content="{{ page.title | default: site.title | markdownify | strip_html | strip_newlines | escape_once }}">
{% if seo_url %}
<link rel="canonical" href="{{ page.url | prepend: seo_url | replace: "/index.html", "/" }}">
<meta property="og:url" content="{{ page.url | prepend: seo_url | replace: "/index.html", "/" }}">
{% endif %}
{% if page.excerpt %}
<meta property="og:description" content="{{ seo_description }}">
{% endif %}
{% if site.twitter.username %}
<meta name="twitter:site" content="@{{ site.twitter.username | replace: "@", "" }}">
<meta name="twitter:title" content="{{ page.title | default: site.title | markdownify | strip_html | strip_newlines | escape_once }}">
<meta name="twitter:description" content="{{ seo_description }}">
<meta name="twitter:url" content="{{ canonical_url }}">
{% if page.header.image %}
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="{% if page.header.image contains "://" %}{{ page.header.image }}{% else %}{{ page.header.image | absolute_url }}{% endif %}">
{% else %}
<meta name="twitter:card" content="summary">
{% if page.header.teaser %}
<meta name="twitter:image" content="{% if page.header.teaser contains "://" %}{{ page.header.teaser }}{% else %}{{ page.header.teaser | absolute_url }}{% endif %}">
{% elsif site.og_image %}
<meta name="twitter:image" content="{{ site.og_image | absolute_url }}">
{% endif %}
{% endif %}
{% if seo_author_twitter %}
<meta name="twitter:creator" content="@{{ seo_author_twitter }}">
{% endif %}
{% endif %}
{% if site.facebook %}
{% if site.facebook.publisher %}
<meta property="article:publisher" content="{{ site.facebook.publisher }}">
{% endif %}
{% if site.facebook.app_id %}
<meta property="fb:app_id" content="{{ site.facebook.app_id }}">
{% endif %}
{% endif %}
{% if page.header.image %}
<meta property="og:image" content="{% if page.header.image contains "://" %}{{ page.header.image }}{% else %}{{ page.header.image | absolute_url }}{% endif %}">
{% elsif page.header.overlay_image %}
<meta property="og:image" content="{% if page.header.overlay_image contains "://" %}{{ page.header.overlay_image }}{% else %}{{ page.header.overlay_image | absolute_url }}{% endif %}">
{% elsif page.header.teaser %}
<meta property="og:image" content="{% if page.header.teaser contains "://" %}{{ page.header.teaser }}{% else %}{{ page.header.teaser | absolute_url }}{% endif %}">
{% elsif site.og_image %}
<meta property="og:image" content="{% if site.og_image contains "://" %}{{ site.og_image }}{% else %}{{ site.og_image | absolute_url }}{% endif %}">
{% endif %}
{% if page.date %}
<meta property="og:type" content="article">
<meta property="article:published_time" content="{{ page.date | date_to_xmlschema }}">
{% endif %}
{% if paginator.previous_page %}
<link rel="prev" href="{{ paginator.previous_page_path | prepend: seo_url }}">
{% endif %}
{% if paginator.next_page %}
<link rel="next" href="{{ paginator.next_page_path | prepend: seo_url }}">
{% endif %}
{% if site.og_image %}
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "Organization",
"url": {{ seo_url | jsonify }},
"logo": {{ site.og_image | absolute_url | jsonify }}
}
</script>
{% endif %}
{% if site.social %}
<script type="application/ld+json">
{
"@context" : "http://schema.org",
"@type" : "{% if site.social.type %}{{ site.social.type }}{% else %}Person{% endif %}",
"name" : "{{ site.social.name | default: site.name }}",
"url" : {{ seo_url | jsonify }},
"sameAs" : {{ site.social.links | jsonify }}
}
</script>
{% endif %}
{% if site.google_site_verification %}
<meta name="google-site-verification" content="{{ site.google_site_verification }}" />
{% endif %}
{% if site.bing_site_verification %}
<meta name="msvalidate.01" content="{{ site.bing_site_verification }}">
{% endif %}
{% if site.alexa_site_verification %}
<meta name="alexaVerifyID" content="{{ site.alexa_site_verification }}">
{% endif %}
{% if site.yandex_site_verification %}
<meta name="yandex-verification" content="{{ site.yandex_site_verification }}">
{% endif %}
<!-- end SEO -->

7
_includes/sidebar.html Normal file
View File

@ -0,0 +1,7 @@
{% if page.sidebar %}
<div class="sidebar sticky" style="display: none;">
{% include nav_list %}
</div>
{% endif %}

View File

@ -0,0 +1,13 @@
<section class="page__share">
{% if site.data.ui-text[site.locale].share_on_label %}
<h4 class="page__share-title">{{ site.data.ui-text[site.locale].share_on_label | default: "Share on" }}</h4>
{% endif %}
<a href="https://twitter.com/intent/tweet?{% if site.twitter.username %}via={{ site.twitter.username | url_encode }}&{% endif %}text={{ page.title | url_encode }}%20{{ page.url | absolute_url | url_encode }}" class="btn btn--twitter" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
<a href="https://www.facebook.com/sharer/sharer.php?u={{ page.url | absolute_url | url_encode }}" class="btn btn--facebook" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
<a href="https://plus.google.com/share?url={{ page.url | absolute_url | url_encode }}" class="btn btn--google-plus" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url={{ page.url | absolute_url | url_encode }}" class="btn btn--linkedin" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
</section>

26
_includes/tag-list.html Normal file
View File

@ -0,0 +1,26 @@
{% case site.tag_archive.type %}
{% when "liquid" %}
{% assign path_type = "#" %}
{% when "jekyll-archives" %}
{% assign path_type = nil %}
{% endcase %}
{% if site.tag_archive.path %}
{% comment %}
<!-- Sort alphabetically regardless of case e.g. a B c d E -->
<!-- modified from http://www.codeofclimber.ru/2015/sorting-site-tags-in-jekyll/ -->
{% endcomment %}
{% capture page_tags %}{% for tag in page.tags %}{{ tag | downcase }}#{{ tag }}{% unless forloop.last %},{% endunless %}{% endfor %}{% endcapture %}
{% assign tag_hashes = page_tags | split: ',' | sort %}
<p class="page__taxonomy">
<strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].tags_label | default: "Tags:" }} </strong>
<span itemprop="keywords">
{% for hash in tag_hashes %}
{% assign keyValue = hash | split: '#' %}
{% capture tag_word %}{{ keyValue[1] | strip_newlines }}{% endcapture %}
<a href="{{ tag_word | slugify | prepend: path_type | prepend: site.tag_archive.path | absolute_url }}" class="page__taxonomy-item" rel="tag">{{ tag_word }}</a>{% unless forloop.last %}<span class="sep">, </span>{% endunless %}
{% endfor %}
</span>
</p>
{% endif %}

7
_includes/toc Normal file
View File

@ -0,0 +1,7 @@
<aside class="sidebar__right">
<nav class="toc" markdown="1">
<header><h4 class="nav__title"><i class="fa fa-{{ include.icon | default: 'file-text' }}"></i> {{ include.title | default: site.data.ui-text[site.locale].toc_label }}</h4></header>
* Auto generated table of contents
{:toc .toc__menu}
</nav>
</aside>

11
_includes/video Normal file
View File

@ -0,0 +1,11 @@
{% capture video_id %}{{ include.id }}{% endcapture %}
{% capture video_provider %}{{ include.provider }}{% endcapture %}
<!-- Courtesy of embedresponsively.com //-->
<div class="responsive-video-container">
{% if video_provider == "vimeo" %}
<iframe src="https://player.vimeo.com/video/{{ video_id }}" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
{% elsif video_provider == "youtube" %}
<iframe src="https://www.youtube.com/embed/{{ video_id }}" frameborder="0" allowfullscreen></iframe>
{% endif %}
</div>

View File

@ -0,0 +1,15 @@
---
layout: default
author_profile: false
---
<div id="main" role="main">
{% include sidebar.html %}
<div class="archive">
<h1 class="page__title">{{ page.title }}</h1>
{% for post in page.posts %}
{% include archive-single.html %}
{% endfor %}
</div>
</div>

26
_layouts/archive.html Normal file
View File

@ -0,0 +1,26 @@
---
layout: default
---
{% if page.header.overlay_color or page.header.overlay_image or page.header.image %}
{% include page__hero.html %}
{% elsif page.header.video.id and page.header.video.provider %}
{% include page__hero_video.html %}
{% endif %}
{% if page.url != "/" and site.breadcrumbs %}
{% unless paginator %}
{% include breadcrumbs.html %}
{% endunless %}
{% endif %}
<div id="main" role="main">
{% include sidebar.html %}
<div class="archive">
{% unless page.header.overlay_color or page.header.overlay_image %}
<h1 class="page__title">{{ page.title }}</h1>
{% endunless %}
{{ content }}
</div>
</div>

10
_layouts/compress.html Normal file
View File

@ -0,0 +1,10 @@
---
# Jekyll layout that compresses HTML
# v3.0.2
# http://jch.penibelst.de/
# © 20142015 Anatol Broder
# MIT License
---
{% capture _LINE_FEED %}
{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd p rt rp optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}</{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "<!-- -->" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "<pre" %}{% assign _content = "" %}{% for _pre_before in _pre_befores %}{% assign _pres = _pre_before | split: "</pre>" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "</pre>" %}<pre{{ _pres.first }}</pre>{% endif %}{% unless _pre_before contains "</pre>" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " <e;<e; </e>;</e>;</e> ;</e>" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} <table id="compress_html_profile_{{ site.time | date: "%Y%m%d" }}" class="compress_html_profile"> <thead> <tr> <td>Step <td>Bytes <tbody> <tr> <td>raw <td>{{ content | size }}{% if _profile_endings %} <tr> <td>endings <td>{{ _profile_endings }}{% endif %}{% if _profile_startings %} <tr> <td>startings <td>{{ _profile_startings }}{% endif %}{% if _profile_comments %} <tr> <td>comments <td>{{ _profile_comments }}{% endif %}{% if _profile_collapse %} <tr> <td>collapse <td>{{ _profile_collapse }}{% endif %}{% if _profile_clippings %} <tr> <td>clippings <td>{{ _profile_clippings }}{% endif %} </table>{% endif %}{% endif %}

34
_layouts/default.html Normal file
View File

@ -0,0 +1,34 @@
---
---
<!doctype html>
<!--
Minimal Mistakes Jekyll Theme 4.6.0 by Michael Rose
Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
Free for personal and commercial use under the MIT license
https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
-->
<html lang="{{ site.locale | slice: 0,2 | default: "en" }}" class="no-js">
<head>
{% include head.html %}
{% include head/custom.html %}
</head>
<body class="layout--{{ page.layout | default: layout.layout }}{% if page.classes or layout.classes %}{{ page.classes | default: layout.classes | join: ' ' | prepend: ' ' }}{% endif %}">
{% include browser-upgrade.html %}
{% include masthead.html %}
{{ content }}
<div class="page__footer">
<footer>
{% include footer/custom.html %}
{% include footer.html %}
</footer>
</div>
{% include scripts.html %}
</body>
</html>

11
_layouts/home.html Normal file
View File

@ -0,0 +1,11 @@
---
layout: archive
---
<h3 class="archive__subtitle">{{ site.data.ui-text[site.locale].recent_posts | default: "Recent Posts" }}</h3>
{% for post in paginator.posts %}
{% include archive-single.html %}
{% endfor %}
{% include paginator.html %}

View File

@ -0,0 +1,85 @@
---
layout: default
---
{% if page.header.overlay_color or page.header.overlay_image or page.header.image %}
{% include page__hero.html %}
{% elsif page.header.video.id and page.header.video.provider %}
{% include page__hero_video.html %}
{% endif %}
{% if page.url != "/" and site.breadcrumbs %}
{% unless paginator %}
{% include breadcrumbs.html %}
{% endunless %}
{% endif %}
<div id="main" role="main">
{% include sidebar.html %}
<article class="page" itemscope itemtype="http://schema.org/CreativeWork">
{% if page.title %}<meta itemprop="headline" content="{{ page.title | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
{% if page.excerpt %}<meta itemprop="description" content="{{ page.excerpt | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
{% if page.date %}<meta itemprop="datePublished" content="{{ page.date | date: "%B %d, %Y" }}">{% endif %}
{% if page.last_modified_at %}<meta itemprop="dateModified" content="{{ page.last_modified_at | date: "%B %d, %Y" }}">{% endif %}
<div class="page__inner-wrap">
{% unless page.header.overlay_color or page.header.overlay_image %}
<header>
{% if page.title %}<h1 class="page__title" itemprop="headline">{{ page.title | markdownify | remove: "<p>" | remove: "</p>" }}</h1>{% endif %}
{% if page.read_time %}
<p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> {% include read-time.html %}</p>
{% endif %}
</header>
{% endunless %}
<section class="page__content" itemprop="text">
{{ content }}
{% if page.link %}<div><a href="{{ page.link }}" class="btn btn--primary">{{ site.data.ui-text[site.locale].ext_link_label | default: "Direct Link" }}</a></div>{% endif %}
</section>
<footer class="page__meta">
{% if site.data.ui-text[site.locale].meta_label %}
<h4 class="page__meta-title">{{ site.data.ui-text[site.locale].meta_label }}</h4>
{% endif %}
{% include page__taxonomy.html %}
{% if page.last_modified_at %}
<p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}</strong> <time datetime="{{ page.last_modified_at | date: "%Y-%m-%d" }}">{{ page.last_modified_at | date: "%B %d, %Y" }}</time></p>
{% elsif page.date %}
<p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}</strong> <time datetime="{{ page.date | date_to_xmlschema }}">{{ page.date | date: "%B %d, %Y" }}</time></p>
{% endif %}
</footer>
{% if page.share %}{% include social-share.html %}{% endif %}
{% include post_pagination.html %}
</div>
{% if site.comments.provider and page.comments %}
{% include comments.html %}
{% endif %}
</article>
{% comment %}<!-- only show related on a post page when `related: true` -->{% endcomment %}
{% if page.id and page.related and site.related_posts.size > 0 %}
<div class="page__related">
<h4 class="page__related-title">{{ site.data.ui-text[site.locale].related_label | default: "You May Also Enjoy" }}</h4>
<div class="grid__wrapper">
{% for post in site.related_posts limit:4 %}
{% include archive-single.html type="grid" %}
{% endfor %}
</div>
</div>
{% comment %}<!-- otherwise show recent posts if no related when `related: true` -->{% endcomment %}
{% elsif page.id and page.related %}
<div class="page__related">
<h4 class="page__related-title">{{ site.data.ui-text[site.locale].related_label | default: "You May Also Enjoy" }}</h4>
<div class="grid__wrapper">
{% for post in site.posts limit:4 %}
{% include archive-single.html type="grid" %}
{% endfor %}
</div>
</div>
{% endif %}
</div>

157
_layouts/single.html Normal file
View File

@ -0,0 +1,157 @@
---
layout: default
---
{% if page.header.overlay_color or page.header.overlay_image or page.header.image %}
{% include page__hero.html %}
{% elsif page.header.video.id and page.header.video.provider %}
{% include page__hero_video.html %}
{% endif %}
{% if page.url != "/" and site.breadcrumbs %}
{% unless paginator %}
{% include breadcrumbs.html %}
{% endunless %}
{% endif %}
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script>
(adsbygoogle = window.adsbygoogle || []).push({
google_ad_client: "ca-pub-6670011780914577",
enable_page_level_ads: true
});
</script>
<div id="main" role="main">
{% include sidebar.html %}
<article class="page" itemscope itemtype="http://schema.org/CreativeWork">
{% if page.title %}<meta itemprop="headline" content="{{ page.title | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
{% if page.excerpt %}<meta itemprop="description" content="{{ page.excerpt | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
{% if page.date %}<meta itemprop="datePublished" content="{{ page.date | date: "%B %d, %Y" }}">{% endif %}
{% if page.last_modified_at %}<meta itemprop="dateModified" content="{{ page.last_modified_at | date: "%B %d, %Y" }}">{% endif %}
<div class="page__inner-wrap">
{% unless page.header.overlay_color or page.header.overlay_image %}
<header>
{% if page.title %}<h1 class="page__title" itemprop="headline">{{ page.title | markdownify | remove: "<p>" | remove: "</p>" }}</h1>{% endif %}
{% if page.read_time %}
<p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> {% include read-time.html %}</p>
{% endif %}
</header>
{% endunless %}
<section class="page__content" itemprop="text">
<hr>
{% assign split_path = page.path | split: "/" %}
{% assign locale = split_path[1] %}
{% for link in site.data.navigation[locale].bottom %}
{% if link.url contains 'http' %}
{% assign domain = '' %}
{% else %}
{% assign domain = site.url | append: site.baseurl %}
{% endif %}
<div class ="notice"><b>{{ link.title }}</b></div>
{% endfor %}
<hr>
<center>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-6670011780914577"
data-ad-slot="2889110246"
data-ad-format="auto">
</ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-6670011780914577"
data-ad-slot="8734909100"
data-ad-format="auto">
</ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</center>
<hr>
{{ content }}
{% if page.link %}<div><a href="{{ page.link }}" class="btn btn--primary">{{ site.data.ui-text[site.locale].ext_link_label | default: "Direct Link" }}</a></div>{% endif %}
<hr>
<center>
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-6670011780914577"
data-ad-slot="7670623049"
data-ad-format="horizontal">
</ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-6670011780914577"
data-ad-slot="9147356245"
data-ad-format="horizontal">
</ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</center>
</section>
<footer class="page__meta">
{% if site.data.ui-text[site.locale].meta_label %}
<h4 class="page__meta-title">{{ site.data.ui-text[site.locale].meta_label }}</h4>
{% endif %}
{% include page__taxonomy.html %}
{% if page.last_modified_at %}
<p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}</strong> <time datetime="{{ page.last_modified_at | date: "%Y-%m-%d" }}">{{ page.last_modified_at | date: "%B %d, %Y" }}</time></p>
{% elsif page.date %}
<p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}</strong> <time datetime="{{ page.date | date_to_xmlschema }}">{{ page.date | date: "%B %d, %Y" }}</time></p>
{% endif %}
</footer>
{% if page.share %}{% include social-share.html %}{% endif %}
{% include post_pagination.html %}
</div>
{% if site.comments.provider and page.comments %}
{% include comments.html %}
{% endif %}
</article>
{% comment %}<!-- only show related on a post page when `related: true` -->{% endcomment %}
{% if page.id and page.related and site.related_posts.size > 0 %}
<div class="page__related">
<h4 class="page__related-title">{{ site.data.ui-text[site.locale].related_label | default: "You May Also Enjoy" }}</h4>
<div class="grid__wrapper">
{% for post in site.related_posts limit:4 %}
{% include archive-single.html type="grid" %}
{% endfor %}
</div>
</div>
{% comment %}<!-- otherwise show recent posts if no related when `related: true` -->{% endcomment %}
{% elsif page.id and page.related %}
<div class="page__related">
<h4 class="page__related-title">{{ site.data.ui-text[site.locale].related_label | default: "You May Also Enjoy" }}</h4>
<div class="grid__wrapper">
{% for post in site.posts limit:4 %}
{% include archive-single.html type="grid" %}
{% endfor %}
</div>
</div>
{% endif %}
</div>

84
_layouts/splash.html Normal file
View File

@ -0,0 +1,84 @@
---
layout: default
---
{% if page.header.overlay_color or page.header.overlay_image or page.header.image %}
{% include page__hero.html %}
{% elsif page.header.video.id and page.header.video.provider %}
{% include page__hero_video.html %}
{% endif %}
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script>
(adsbygoogle = window.adsbygoogle || []).push({
google_ad_client: "ca-pub-6670011780914577",
enable_page_level_ads: true
});
</script>
<div id="main" role="main">
<article class="splash" itemscope itemtype="http://schema.org/CreativeWork">
{% if page.title %}<meta itemprop="headline" content="{{ page.title | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
{% if page.excerpt %}<meta itemprop="description" content="{{ page.excerpt | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
{% if page.date %}<meta itemprop="datePublished" content="{{ page.date | date: "%B %d, %Y" }}">{% endif %}
{% if page.last_modified_at %}<meta itemprop="dateModified" content="{{ page.last_modified_at | date: "%B %d, %Y" }}">{% endif %}
<section class="page__content" itemprop="text">
<hr>
{% assign split_path = page.path | split: "/" %}
{% assign locale = split_path[1] %}
{% for link in site.data.navigation[locale].bottom %}
{% if link.url contains 'http' %}
{% assign domain = '' %}
{% else %}
{% assign domain = site.url | append: site.baseurl %}
{% endif %}
<div class ="notice"><b>{{ link.title }}</b></div>
{% endfor %}
<hr>
<center>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-6670011780914577"
data-ad-slot="2889110246"
data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</center>
<hr>
{{ content }}
</section>
</article>
<hr>
<center>
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-6670011780914577"
data-ad-slot="7670623049"
data-ad-format="horizontal">
</ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-6670011780914577"
data-ad-slot="9147356245"
data-ad-format="horizontal">
</ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</center>
</div>

9
_pages/en_US/404.txt Normal file
View File

@ -0,0 +1,9 @@
---
title: "Page Not Found" #
layout: single-no-ads
excerpt: "Page not found. Your pixels are in another canvas." #
sitemap: false
---
Sorry, but the page you were trying to view does not exist.
{: .notice--info}

View File

@ -0,0 +1,43 @@
---
title: "Blocking Updates"
---
{% include toc title="Table of Contents" %}
### Required Reading
Currently, homebrew is only available for firmware version 3.0.0, but future homebrew and CFW support is planned for all versions up to 4.1.0.
In order to guarantee future access, we set your current network's DNS to a server (hosted by ReSwitched) which blocks requests to Nintendo's Switch update server.
Additionally, we enter Recovery / Maintenance Mode and delete any update data which may have already been downloaded.
### Instructions
#### Section I - DNS Configuration
Note that these DNS servers will need to be set on each network you connect your device to for it to block updates!
{: .notice--warning}
1. Launch System Settings
1. Navigate to `Internet` -> `Internet Settings`
1. Select your current network
+ This is signified by a green check mark next to the network
1. Select "Change Settings"
1. Set "DNS Settings" to "Manual"
1. Set "Primary DNS" to `173.255.238.217`
1. Set "Secondary DNS" to `173.255.238.217`
1. Save the network settings
1. Exit System Settings
#### Section II - Deleting Update Data
1. Power off your device
1. Power on your device while holding (Power) + (Volume Up) + (Volume Down)
1. Any downloaded update data has been deleted from your system
1. Press (Power) to power off your device
___
Updates are now blocked on your device for the configured network.
{: .notice--success}

55
_pages/en_US/credits.txt Normal file
View File

@ -0,0 +1,55 @@
---
title: "Credits"
---
**Special thanks to all of [the translators](https://crowdin.com/project/switch-guide) for being awesome!**
{: .notice--primary}
If I forgot you here, contact me and I'll add your name.
{% capture notice-1 %}
+ andoma
+ andeor
+ Aurora Wright
+ bunnei
+ Daeken
+ derrek
+ f916253
+ fincs
+ hedgeberg
+ hexkyz
+ hthh
+ ihaveahax
+ junko
+ kgsws
+ ktemkin
+ Maschell
+ misson20000
+ motezazer
+ mtheall
+ naehrwert
+ nedwill
+ neobrain
+ Nicolás
+ Normmatt
+ ogniK
+ q3k
+ racerxdl
+ s1w
+ SciresM
+ shinyquag
+ shufol3
+ sirocyl
+ smea
+ st4rk
+ Stary
+ stuckpixel
+ thexyz
+ TuxSH
+ Überflüp
+ WntrMute
{% endcapture %}
<div class="notice--info">{{ notice-1 | markdownify }}</div>

View File

@ -0,0 +1,126 @@
---
title: "Development (libtransistor)"
---
{% include toc title="Table of Contents" %}
### Required Reading
### What You Need
* A supported operating system
+ MacOS and most linux distributions are supported; commands for Arch Linux, Ubuntu, and Debian will be supplied
+ Windows is *only* supported using a [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) distribution
* Basic development tools
+ Linux / WSL: install the relevant development package for your distribution (such as `base-devel` on Arch, or `build-essential` on Ubuntu / Debian)
+ MacOS: install the Xcode Command Line Tools and the [Homebrew](https://brew.sh/) package manager
### Instructions
#### Section I - Installing Dependencies
The libtransistor library relies on several dependencies, including LLVM / Clang, Python 3, and cmake.
To install them, run the commands corresponding to your operating system.
+ MacOS:
~~~ bash
# install dependencies
brew install python3 cmake llvm
# manually add llvm to $PATH
echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> ~/.bash_profile
~~~
+ Arch Linux:
~~~ bash
# install dependencies
sudo pacman -Syu python python-pip cmake clang lld nmap
~~~
+ Ubuntu / Debian:
Before running these commands, add the [LLVM repository](https://apt.llvm.org/) corresponding to your operating system to `/etc/apt/sources.list`.
~~~ bash
# add the LLVM signature key
# fingerprint: 6084 F3CF 814B 57C1 CF12 EFD5 15CF 4D18 AF4F 7421
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -
# install dependencies
sudo apt-get update
sudo apt-get install build-essential automake autoconf python3-setuptools squashfs-tools python3 python3-dev python3-pip cmake clang-5.0 lld-5.0 nmap
~~~
#### Section II - Building libtransistor
+ MacOS:
~~~ bash
# clone the repository
git clone --recursive https://github.com/reswitched/libtransistor
cd libtransistor
# install python dependencies
pip3 install -r requirements.txt
# set libtransistor environment variable to current directory
echo "export LIBTRANSISTOR_HOME=$(pwd)" >> ~/.bashrc
# build libtransistor
make
~~~
+ Arch Linux:
~~~ bash
# clone the repository
git clone --recursive https://github.com/reswitched/libtransistor
cd libtransistor
# install python dependencies
pip install -r requirements.txt
# set libtransistor environment variable to current directory
echo "export LIBTRANSISTOR_HOME=$(pwd)" >> ~/.bashrc
# build libtransistor
make
~~~
+ Ubuntu / Debian:
~~~ bash
# clone the repository
git clone --recursive https://github.com/reswitched/libtransistor
cd libtransistor
# install python dependencies
pip3 install -r requirements.txt
# set libtransistor environment variable to current directory
echo "export LIBTRANSISTOR_HOME=$(pwd)" >> ~/.bashrc
# build libtransistor
make LLVM_POSTFIX=-5.0
~~~
#### Section III - ACE Loader
For information on using ACE Loader, see the [repository](https://github.com/reswitched/libtransistor/tree/development/projects/ace_loader) on GitHub.
{: .notice--info}
#### Section IV - Mephisto
For information on using Mephisto, see the [repository](https://github.com/reswitched/Mephisto) on GitHub.
{: .notice--info}
___
You now have a fully functional libtransistor development environment.
{: .notice--success}
If you are interested in collaborating with ReSwitched members on Homebrew Development, check out [ReSwitched on Discord](https://discord.gg/ZdqEhed).
{: .notice--success}

View File

@ -0,0 +1,19 @@
---
title: "Donations" #
layout: single-no-ads
---
[![Paypal]({{ "/images/paypal_white.png" | absolute_url }}){:height="72px" width="256px"}{: style="padding-bottom: .35em"}](https://www.paypal.me/plailectguides/15){: .align-center}
plailect@gmail.com
{: .text-center}
{: .notice--info}
[![Bitcoin]({{ "/images/bitcoin_white.png" | absolute_url }}){:height="73px" width="256px"}{: style="padding-bottom: .35em"}](bitcoin:3MtzjaRNrcG57RbNxJegcs8UdtaEfmSZLp){: .align-center}
3MtzjaRNrcG57RbNxJegcs8UdtaEfmSZLp
{: .text-center}
{: .notice--info}
[![Ethereum]({{ "/images/ethereum_white.png" | absolute_url }}){:height="64px" width="256px"}{: style="padding-bottom: .35em"}](https://www.ethereum.org/){: .align-center}
0x608C5554D2C53698aA7DFFc7e64BF37f7bebb475
{: .text-center}
{: .notice--info}

View File

@ -0,0 +1,62 @@
---
title: "F3 (Linux)"
---
{% include toc title="Table of Contents" %}
### Required Reading
This is an add-on section for checking your SD card for errors using F3.
Depending on the size of your SD card and the speed of your computer, this process can take up to several hours!
This page is for Linux users only. If you are not on Linux, check out the [H2testw (windows)](h2testw-(windows)) or [F3X (mac)](f3x-(mac)) pages.
### What You Need
* The latest version of [F3](https://github.com/AltraMayor/f3/archive/v6.0.zip)
### Instructions
1. Unzip the f3 `.zip` file
1. `cd` into the f3 directory
1. Run `make` to compile F3
1. Insert your SD card into your computer
1. Mount your SD card
1. Run `./f3write <your sd card mount point>`
1. Wait until the process is complete. See below for an example output.
$ ./f3write /media/michel/6135-3363/
Free space: 29.71 GB
Creating file 1.h2w ... OK!
...
Creating file 30.h2w ... OK!
Free space: 0.00 Byte
Average Writing speed: 4.90 MB/s
1. Run `./f3read <your sd card mount point>`
1. Wait until the process is complete. See below for an example output.
$ ./f3read /media/michel/6135-3363/
SECTORS ok/corrupted/changed/overwritten
Validating file 1.h2w ... 2097152/ 0/ 0/ 0
...
Validating file 30.h2w ... 1491904/ 0/ 0/ 0
Data OK: 29.71 GB (62309312 sectors)
Data LOST: 0.00 Byte (0 sectors)
Corrupted: 0.00 Byte (0 sectors)
Slightly changed: 0.00 Byte (0 sectors)
Overwritten: 0.00 Byte (0 sectors)
Average Reading speed: 9.42 MB/s
___
If the test shows the result `Data LOST: 0.00 Byte (0 sectors)` your SD card is good and you can delete all `.h2w` files on your SD card
{: .notice--success}
If the test shows any other results, your SD card may be corrupted or damaged and you may have to replace it!
{: .notice--danger}
### Return to [Get Started](get-started)
{: .notice--primary}

View File

@ -0,0 +1,37 @@
---
title: "F3X (Mac)"
---
{% include toc title="Table of Contents" %}
### Required Reading
This is an add-on section for checking your SD card for errors using F3X.
Depending on the size of your SD card and the speed of your computer, this process can take up to several hours!
This page is for Mac users only. If you are not on Mac, check out the [H2testw (windows)](h2testw-(windows)) or [F3 (Linux)](f3-(linux)) pages.
### What You Need
* The latest release of [F3X](https://github.com/insidegui/F3X/releases/latest){:target="_blank"}
### Instructions
1. Unzip the F3X `.zip` file
1. Insert your SD card into your computer
1. Run the F3X app
1. Select your SD card
1. Press "Start Test"
1. Wait until the process is complete.
___
If the test shows the result `Success! Your card is ok!` your SD card is good and you can delete all `.h2w` files on your SD card
{: .notice--success}
If the test shows any other results, your SD card may be corrupted or damaged and you may have to replace it!
{: .notice--danger}
### Return to [Get Started](get-started)
{: .notice--primary}

4
_pages/en_US/faq.txt Normal file
View File

@ -0,0 +1,4 @@
---
title: "FAQ"
---

View File

@ -0,0 +1,37 @@
---
title: "File Extensions (Windows)"
---
{% include toc title="Table of Contents" %}
This is an add-on section for disabling Windows's default behavior of hiding file extensions.
This will make it easier for you to find the referenced files in the rest of this guide.
### Instructions
#### Windows 10 / 8.1 / 8
1. Launch File Explorer by opening any directory, such as your SD card directory
1. Click the "View" option on the ribbon menu
1. Check the box labeled "File name extensions"
![]({{ "/images/screenshots/windows-10-file-extensions.png" | absolute_url }})
{: .notice--info}
#### Windows 7
1. Open the start menu by clicking on it or using the Windows key
1. Search for "Folder Options" and select the corresponding result
![]({{ "/images/screenshots/windows-7-folder-options-start-menu.png" | absolute_url }})
{: .notice--info}
1. Click the "View" option at the top of the Folder Options menu
1. Uncheck the box labeled "Hide extensions for known file types"
![]({{ "/images/screenshots/windows-7-folder-options.png" | absolute_url }})
{: .notice--info}
### Return to [Get Started](get-started)
{: .notice--primary}

View File

@ -0,0 +1,56 @@
---
title: "Game Card Update"
---
{% include toc title="Table of Contents" %}
### Required Reading
All game cards contain a copy of the required firmware version to play it, allowing anyone on a lower version to update to that version and play the game (even without an internet connection).
We can take advantage of this by using a game containing a specific version in order to install a more recent firmware version (3.0.0) without updating all the way to the latest available.
Before performing the game card update, we block online updates by using airplane mode and enter Recovery / Maintenance Mode to delete any update data which may have already been downloaded.
### What you need
* An original revision game card of [Pokkén Tournament DX](https://amzn.to/2F9nsF3)
+ Original revisions of this game card contain 3.0.0; they have a green printed circuit board and a serial ending in **000** (see image below)
+ Newer revisions of this game card contain 3.0.1; they have a black printed circuit board and a serial ending in **001** (*avoid using these to update!*)
![]({{ "/images/screenshots/pokken-game-card.png" | absolute_url }}){:height="148px" width="203px"}
{: .notice--info}
### Instructions
#### Section I - Enable Airplane Mode
1. Launch System Settings
1. Navigate to `Airplane Mode`
1. Enable Airplane Mode
1. Exit System Settings
#### Section II - Deleting Update Data
1. Power off your device
1. Power on your device while holding (Power) + (Volume Up) + (Volume Down)
1. Any downloaded update data has been deleted from your system
1. Press (Power) to power off your device
#### Section III - Game Card Update
1. Insert your Pokkén Tournament DX game card into your device
1. Attempt to launch the game
1. Update when prompted
#### Section IV - Disable Airplane Mode
1. Launch System Settings
1. Navigate to `Airplane Mode`
1. Disable Airplane Mode
1. Exit System Settings
___
### Continue to [Homebrew Launcher](homebrew-launcher)
{: .notice--primary}

View File

@ -0,0 +1,66 @@
---
title: "Get Started"
---
{% include toc title="Table of Contents" %}
### Required Reading
Different device versions will require different steps to achieve the current end goal of Homebrew. This page will help you find where to start for your device.
Before starting, Windows users should enable the option to show file extensions using [File Extensions (Windows)](file-extensions-(windows))!
{: .notice--info}
Before starting, you may want to check your SD card for errors using [H2testw (Windows)](h2testw-(windows)), [F3 (Linux)](f3-(linux)), or [F3X (Mac)](f3x-(mac))!
{: .notice--warning}
Select the appropriate page for your version from the chart below. Note that the "from" and "to" fields are inclusive. This means that, for example, the "from 1.0.0 to 2.3.0" row includes 1.0.0, 2.3.0, and all versions in-between.
Your device version can be found under the System Information menu in the System tab of the Settings application.
![]({{ "/images/screenshots/system-version.png" | absolute_url }})
{: .notice--info}
{% capture notice %}
Note that the device may not display the system version if a downloaded update is pending installation.
If that is the case on your device, you can view your version from Recovery / Maintenance Mode by powering on your device while holding (Power) + (Volume Up) + (Volume Down).
{% endcapture %}
<div class="notice--warning">{{ notice | markdownify }}</div>
### Version Table
<table>
<colgroup>
<col span="1" style="width: 10%;">
<col span="1" style="width: 10%;">
<col span="1" style="width: 80%;">
</colgroup>
<thead>
<tr>
<th style="text-align: center; font-weight: bold;">From</th>
<th style="text-align: center; font-weight: bold;">To</th>
<th style="text-align: center; font-weight: bold;"></th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center; font-weight: bold;">1.0.0</td>
<td style="text-align: center; font-weight: bold;">2.3.0</td>
<td style="text-align: center; font-weight: bold;"><a href="game-card-update">Game Card Update</a></td>
</tr>
<tr>
<td style="text-align: center; font-weight: bold;">3.0.0</td>
<td style="text-align: center; font-weight: bold;">3.0.0</td>
<td style="text-align: center; font-weight: bold;"><a href="homebrew-launcher">Homebrew Launcher</a></td>
</tr>
<tr>
<td style="text-align: center; font-weight: bold;">3.0.1</td>
<td style="text-align: center; font-weight: bold;">4.1.0</td>
<td style="text-align: center; font-weight: bold;"><a href="blocking-updates">Blocking Updates</a></td>
</tr>
</tbody>
</table>

View File

@ -0,0 +1,40 @@
---
title: "H2testw (Windows)"
---
{% include toc title="Table of Contents" %}
### Required Reading
This is an add-on section for checking your SD card for errors using h2testw.
Depending on the size of your SD card and the speed of your computer, this process can take up to several hours!
This page is for Windows users only. If you are not on windows, check out the [F3 (linux)](f3-(linux)) or [F3X (mac)](f3x-(mac)) pages.
### What You Need
* The latest version of [h2testw](http://www.heise.de/ct/Redaktion/bo/downloads/h2testw_1.4.zip)
### Instructions
1. Copy `h2testw.exe` from the h2testw `.zip` to your desktop
1. Insert your SD card into your computer
1. Run `h2tsetw.exe`
1. Select "English"
1. Click "Select target"
1. Select your SD card's drive letter
1. Ensure "all available space" is selected
1. Click "Write + Verify"
1. Wait until the process is completed
___
If the test shows the result `Test finished without errors`, your SD card is good and you can delete all `.h2w` files on your SD card
{: .notice--success}
If the test shows any other results, your SD card may be corrupted or damaged and you may have to replace it!
{: .notice--danger}
### Return to [Get Started](get-started)
{: .notice--primary}

81
_pages/en_US/home.txt Normal file
View File

@ -0,0 +1,81 @@
---
layout: splash
title: "Switch Hacks Guide" #
header:
overlay_color: "#5e616c" #
overlay_image: images/home-page-feature.jpg
overlay_filter: 0.5
caption:
excerpt: "A complete guide to Switch homebrew <br /> and homebrew development.<br />"
---
Thoroughly read all of the introductory pages (including this one!) before proceeding.
{: .notice--warning}
{% capture notice-1 %}
This guide is available in other languages!
Click the <i class="fa fa-language" aria-hidden="true"></i> icon at the top right of the page to change the language.
Alternatively, click [here](https://crowdin.com/project/switch-guide) to help to keep these translations up to date.
{% endcapture %}
<div class="notice--success">{{ notice-1 | markdownify }}</div>
## What is Homebrew?
[**Homebrew**](https://en.wikipedia.org/wiki/List_of_homebrew_video_games) usually refers to software that is not authorized by Nintendo. This includes homebrew tools, applications, games, and emulators.
If your device is on firmware version 3.0.0, running homebrew on your device is 100% free using just the system browser. Lower firmware versions can update to 3.0.0 with the use of a game card. Higher firmware versions can block future updates in order to assure access to future exploits.
## What is Custom Firmware?
When released, **Custom Firmware** ("CFW") will enable you to use more advanced hacks that userland homebrew can't easily do. It is currently in development, and will be released according to schedule when all relevant components are completed.
The current CFW release schedule is in order of ascending firmware versions, divided into the following tiers:
<table style="max-width:420px;">
<colgroup>
<col span="1" style="width: 10%;">
<col span="1" style="width: 10%;">
<col span="1" style="width: 10%;">
</colgroup>
<thead>
<tr>
<th style="text-align: center; font-weight: bold;">Near Future</th>
<th style="text-align: center; font-weight: bold;">Distant Future</th>
<th style="text-align: center; font-weight: bold;">Far Future</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center; font-weight: bold;">1.0.0</td>
<td style="text-align: center; font-weight: bold;">2.0.0 - 3.0.0</td>
<td style="text-align: center; font-weight: bold;">3.0.1 - 4.1.0</td>
</tr>
</tbody>
</table>
If your device is on firmware version 1.0.0 and you are interested in CFW, your best current option is to follow this guide's [Blocking Updates](blocking-updates) page, pick up a Japanese copy of [Puyo Puyo Tetris](http://amzn.to/2sBRvD2) (which will be required for 1.0.0 Custom Firmware), and wait patiently for a CFW release.
{: .notice--info}
If your device is on a firmware version >=3.0.1, your best current option is to update to 4.1.0 (as it will receive CFW at the same time), follow this guide's [Blocking Updates](blocking-updates) page, stock up on games while you can (the eShop only functions on the latest version), and wait patiently for a CFW release.
{: .notice--info}
## What does this guide install?
This guide currently enables access to the Homebrew Launcher via a browser exploit, though "installed" is not a particularly good description. This is because the exploit must be re-run after every reboot in order to re-enable Homebrew Launcher access.
If you are familiar with iOS device "jailbreaking", this idea could be considered analagous to a "tethered jailbreak".
## What do I need to know before starting?
+ While switch hacks are constantly progressing, they are not yet in a very user-friendly state. As such, this guide may require some technical understanding in order to troubleshoot any issues which may come up.
+ The scope of device modification is limited for most current homebrew, meaning there is little chance of data loss or console damage when using popular homebrew applications.
+ This guide will work on all Switch devices on firmwares from 1.0.0 to 3.0.0, with all versions up to 4.1.0 having planned future support. Instructions are included for blocking updates on devices with firmware versions >=3.0.1.
+ You will need a micro SD card for your device. It should be formatted as Fat32 and [MBR, not GPT](http://www.howtogeek.com/245610/) (most micro SD cards will be formatted this way by default).
+ If you need to format a micro SD card, you can use [`guiformat`](http://www.ridgecrop.demon.co.uk/index.htm?guiformat.htm) and set to an Allocation Unit Size of 32K.
___
### Continue to [Get Started](get-started)
{: .notice--primary}

View File

@ -0,0 +1,43 @@
---
title: "Homebrew Development"
---
{% include toc title="Table of Contents" %}
### Required Reading
Currently, the major public exploitation toolkit used for the Switch is PegaSwitch, developed by ReSwitched.
If you are interested in collaborating with ReSwitched members on Homebrew Development, check out [ReSwitched on Discord](https://discord.gg/ZdqEhed).
{: .notice--success}
While the Homebrew Launcher alone is sufficient for running compiled homebrew, any more serious development work will likely require a local PegaSwitch environment.
For information on setting up a local PegaSwitch environment, check out the [PegaSwitch](pegaswitch) page.
{: .notice--primary}
### Libraries
Currently, there are two major libraries used for developing Switch homebrew.
___
#### Development (libtransistor)
The libtransistor library is developed by ReSwitched and built on the LLVM / Clang stack.
Binaries can be run on your PC using the Mephisto emulator, or on your device using either the Homebrew Launcher or ACE Loader.
Continue to [Development (libtransistor)](development-(libtransistor))
{: .notice--primary}
___
#### Development (libnx)
The libnx library is developed by SwitchBrew and built on the devkitA64 toolchain.
Binaries can be run on your device using the Homebrew Launcher.
Continue to [Setting up Development Environment](http://switchbrew.org/index.php?title=Setting_up_Development_Environment) on SwitchBrew
{: .notice--primary}

View File

@ -0,0 +1,125 @@
---
title: "Homebrew Launcher"
---
{% include toc title="Table of Contents" %}
### Required Reading
The Homebrew Launcher is currently "installed" to your device through a browser exploit.
Once this installation has been performed, you will be able to access the Homebrew Launcher through the Album application *until your device is rebooted*.
After a reboot, you will have to re-run the exploit in order to re-enable Homebrew Launcher access on your device. If you are familiar with iOS device "jailbreaking", this idea could be considered analagous to a "tethered jailbreak".
Note that the current homebrew exploit has the side-effect of corrupting your device's Mii Database upon initial installation. While this effect is harmless, it will result in the loss of any user-created Miis.
{: .notice--warning}
### What you need
* The latest release of [nx-hbmenu](https://github.com/switchbrew/nx-hbmenu/releases/latest){:target="_blank"}
### Instructions
#### Section I - Prep Work
1. Power off your device
1. Insert your SD card into your computer
1. Copy `hbmenu.nro` from the nx-hbmenu `.zip` to the root of your SD card
1. Create a folder named `switch` on the root of your SD card if it does not already exist
1. Reinsert your SD card into your device
1. Power on your device
#### Section II - DNS Configuration
Note that these DNS servers will need to be set on each network you connect your device to in order for it to be able to trigger the exploit.
{: .notice--info}
1. Launch System Settings
1. Navigate to `Internet` -> `Internet Settings`
1. Select your current network
+ This is signified by a green check mark next to the network
1. Select "Change Settings"
1. Set "DNS Settings" to "Manual"
1. Set "Primary DNS" to `104.236.106.125`
1. Set "Secondary DNS" to `62.210.147.20`
1. Save the network settings
1. Exit System Settings
#### Section III - Initial Installation
1. Navigate to `Internet` -> `Test Connection`
1. Select your current network
1. Select "Connect to this Network"
1. If the DNS connection was successful, you will see the message "Registration is required to use this network."
1. Select "Next"
1. The Homebrew Launcher webpage
1. Select "Install"
1. The PegaSwitch webpage will load
1. If the exploit was successful, you will see the error `2000-1337`
+ If you get stuck on the PegaSwitch page without seeing the error, reboot your device and try performing the connection test again
1. Reboot your device
#### Section IV - Running the Homebrew Launcher
Note that you will have to re-run this section of the exploit after each reboot in order to re-enable access to the Homebrew Launcher.
1. Navigate to `Internet` -> `Test Connection`
1. Select your current network
1. Select "Connect to this Network"
1. If the DNS connection was successful, you will see the message "Registration is required to use this network."
1. Select "Next"
1. The Homebrew Launcher webpage
1. Select "Run"
1. If the exploit was successful, you will receive a popup asking you to exit
1. Return to the home menu
1. Launch the Album application
1. If the exploit was successful, the Homebrew Launcher will launch
#### Section V - Alternative Browser Applets (Optional)
As you must re-run the "Run" section of the exploit after each reboot, it would be ideal if there was a more convenient way of launching the browser than the connection test.
Fortunately, there are actually [multiple](http://switchbrew.org/index.php?title=Internet_Browser#Browser_Applets) browsers applets on the Switch, and any of them can be used to trigger the browser exploit.
Two convenient methods for launching a browser are listed below:
##### Game Update Prompt
To use this method, you must have at least one game on your home screen.
1. Press (+) with any game highlighted
1. In the "Software Update" tab, select "Via the Internet"
1. The browser applet will launch
##### eShop Sign In Prompt
To use this method, create a second account on your device. Do not connect it to a Nintendo Account.
1. Launch Nintendo eShop
1. Select the second account
1. Select "Sign In and link"
1. The browser applet will launch
___
Note that, currently, homebrew development is in a very early state with a very limited number of applications.
You can find available applications on [switchbrew](http://switchbrew.org/index.php?title=Homebrew_Applications), [/r/SwitchHacks on reddit](https://www.reddit.com/r/SwitchHacks/), or [Switch Homebrew on GBAtemp](https://gbatemp.net/forums/285/).
To install homebrew applications, simply copy the homebrew `.nro` file to the `/switch/` folder on your SD card.
___
You can now launch the Homebrew Launcher by launching the Album application from your device's home menu (until next reboot).
{: .notice--success}
You will need to re-run the "Run" step of the exploit (using any browser applet) after each reboot in order to re-enable Homebrew Launcher access on your device.
{: .notice--warning}
For regular homebrew and development progress summaries, check the [ReSwitched Weekly](https://reswitchedweekly.github.io/) blog regularly.
{: .notice--primary}
For information on contributing to homebrew development as a developer, check out the [Homebrew Development](homebrew-development) page.
{: .notice--primary}

112
_pages/en_US/pegaswitch.txt Normal file
View File

@ -0,0 +1,112 @@
---
title: "PegaSwitch"
---
{% include toc title="Table of Contents" %}
### Required Reading
PegaSwitch is a developer-focused exploitation toolkit for the Switch developed by ReSwitched. It is compatible with firmware versions 1.0.0 - 3.0.0.
The toolkit uses a combination of vulnerabilities to take over the WebKit-based browser, giving the user a shell which can be used to read / write memory, call native functions, and otherwise explore the functionality of the Switch.
Note that the current homebrew exploit has the side-effect of corrupting your device's Mii Database. While this effect is harmless, it will result in the loss of any user-created Miis.
{: .notice--warning}
### What You Need
* A supported operating system
+ MacOS and most linux distributions are supported
+ Windows is best supported using a [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) distribution
* The [git](https://git-scm.com/) version control system
* The [Node.JS](https://nodejs.org/en/download/package-manager/) JavaScript runtime
### Instructions
#### Section I - Network Configuration
PegaSwitch works by hosting a [captive portal](https://en.wikipedia.org/wiki/Captive_portal) using DNS redirection.
For this to work, your device must be able to connect to your PC over the network.
1. Ensure no other applications are bound to UDP port 53 or TCP ports 80 and 8100
+ WSL: look at the "Listening Ports" section of the "Network" tab in `resmon.exe`
+ Linux / MacOS: view the output of `sudo netstat -tulpn`
1. Ensure your firewall does not block incomming connections to any of these ports
#### Section II - Running PegaSwitch
~~~ bash
# clone the repository
git clone https://github.com/reswitched/pegaswitch
# install dependencies
cd pegaswitch
npm install
# start PegaSwitch
# Windows users: omit the 'sudo'
sudo node start.js
~~~
#### Section III - DNS Configuration
Note that these DNS servers will need to be set on each network you connect your device to for it to be able to trigger the exploit.
{: .notice--info}
1. Get your PC's IP address with `ifconfig` (or `ipconfig` on windows)
1. Launch System Settings on your device
1. Navigate to `Internet` -> `Internet Settings`
1. Select your current network
+ This is signified by a green check mark next to the network
1. Select "Change Settings"
1. Set "DNS Settings" to "Manual"
1. Set "Primary DNS" and "Secondary DNS" to your PC's IP address
1. Save the network settings
1. Return to `Internet Settings`
#### Section IV - Initial Connection
1. Navigate to `Internet` -> `Test Connection`
1. Select your current network
1. Select "Connect to this Network"
1. If the DNS connection was successful, you will see the message "Registration is required to use this network."
1. Select "Next"
1. The PegaSwitch webpage will load
1. If the exploit was successful, you will now have a PegaSwitch shell connected to your console
#### Section V - Alternative Browser Applets (Optional)
There are actually [multiple](http://switchbrew.org/index.php?title=Internet_Browser#Browser_Applets) internet browsers on the Switch, and any of them can be used to trigger the browser exploit.
While we used the connection test browser applet to initially trigger the exploit, it may be more convenient in the future to use another browser applet.
Triggering the browser exploit using either of these methods will have the same effect as triggering the exploit through the Connection Test method we used before.
##### Game Update Prompt
To use this method, you must have at least one game on your home screen.
1. Press (+) with any game highlighted
1. In the "Software Update" tab, select "Via the Internet"
1. The browser applet will launch
##### eShop Sign In Prompt
To use this method, create a second account on your device. Do not connect it to a Nintendo Account.
1. Launch Nintendo eShop
1. Select the second account
1. Select "Sign In and link"
1. The browser applet will launch
___
You can now easily connect to your device using the PegaSwitch environment.
{: .notice--success}
For debugging purposes, you may want to [enable extra error info](troubleshooting#enable-extra-error-info).
{: .notice--info}
### Return to [Homebrew Development](homebrew-development)
{: .notice--primary}

View File

@ -0,0 +1,37 @@
---
title: "Site Navigation" #
layout: single-no-ads
sitemap: false
---
{% capture notice-1 %}
**Popular**
+ [Homebrew Launcher](homebrew-launcher)
+ [Blocking Updates](blocking-updates)
+ [Game Card Update](game-card-update)
{% endcapture %}
<div class="notice--info">{{ notice-1 | markdownify }}</div>
{% capture notice-2 %}
**All**
+ [Blocking Updates](blocking-updates)
+ [Credits](credits)
+ [Development (libtransistor)](development-(libtransistor))
+ [Donations](donations)
+ [F3 (Linux)](f3-(linux))
+ [F3X (Mac)](f3x-(mac))
+ [FAQ](faq)
+ [File Extensions (Windows)](file-extensions-(windows))
+ [Game Card Update](game-card-update)
+ [Get Started](get-started)
+ [H2testw (Windows)](h2testw-(windows))
+ [Home](/)
+ [Haxchi](haxchi)
+ [Homebrew Development](homebrew-development)
+ [Homebrew Launcher](homebrew-launcher)
+ [PegaSwitch](pegaswitch)
+ [Why Ads?](why-ads)
{% endcapture %}
<div class="notice--primary">{{ notice-2 | markdownify }}</div>

View File

@ -0,0 +1,42 @@
---
title: "Troubleshooting"
---
{% include toc title="Table of Contents" %}
### Required Reading
If you encounter issues, please look for the section relevant to you and follow the instructions.
If you still cannot solve your issue and need to reach out for help, please come for help prepared with a detailed description of your problem and what you've tried.
## Error 2347-0003
This error occurs when the nx-hbmenu `.nro` is not found on your SD card.
### What You Need
* The latest release of [nx-hbmenu](https://github.com/switchbrew/nx-hbmenu/releases/latest){:target="_blank"}
### Instructions
1. Power off your device
1. Insert your SD card into your computer
1. Copy `hbmenu.nro` from the nx-hbmenu `.zip` to the root of your SD card
1. Reinsert your SD card into your device
1. Power on your device
## Enable Extra Error Info
This script will enable the displaying of extra error info when a fatal error is encountered. It may be useful for debugging purposes.
### What You Need
* [PegaSwitch](pegaswitch)
* [`extraerrorinfo.js`]({{ "/images/extraerrorinfo.js" | absolute_url }})
### Instructions
1. Copy `extraerrorinfo.js` to the `/usefulscripts/` folder in PegaSwitch
1. Connect to your device using PegaSwitch
1. Run `evalfile usefulscripts/extraerrorinfo.js`

15
_pages/en_US/why-ads.txt Normal file
View File

@ -0,0 +1,15 @@
---
title: "Why Ads?" #
layout: single-no-ads
---
This project is an extension of hundreds upon hundreds of hours of constant work.
We maintain this guide, for free, and ensure it is always up to date. Because of this effort, we feel that it is fair for us to attempt to gain a meager income from our work.
This site costs you nothing to use, and all that we display are non-intrusive ads. If you still have a problem with this, feel free to block these ads.
If you do block ads, we would like to also remind you of the [Donations](donations) page, but once again that is optional too.
Thanks,<br>
Plailect & FlimFlam69

View File

@ -0,0 +1,40 @@
/*!
* Minimal Mistakes Jekyll Theme 4.6.0 by Michael Rose
* Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
* Licensed under MIT (https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt)
*/
/* Variables */
@import "minimal-mistakes/variables";
/* Mixins and functions */
@import "minimal-mistakes/vendor/breakpoint/breakpoint";
@include breakpoint-set("to ems", true);
@import "minimal-mistakes/vendor/font-awesome/font-awesome";
@import "minimal-mistakes/vendor/magnific-popup/magnific-popup"; // Magnific Popup
@import "minimal-mistakes/vendor/susy/susy";
@import "minimal-mistakes/mixins";
/* Core CSS */
@import "minimal-mistakes/reset";
@import "minimal-mistakes/base";
@import "minimal-mistakes/forms";
@import "minimal-mistakes/tables";
@import "minimal-mistakes/animations";
/* Components */
@import "minimal-mistakes/buttons";
@import "minimal-mistakes/notices";
@import "minimal-mistakes/masthead";
@import "minimal-mistakes/navigation";
@import "minimal-mistakes/footer";
@import "minimal-mistakes/syntax";
/* Utility classes */
@import "minimal-mistakes/utilities";
/* Layout specific */
@import "minimal-mistakes/page";
@import "minimal-mistakes/archive";
@import "minimal-mistakes/sidebar";
@import "minimal-mistakes/print";

View File

@ -0,0 +1,21 @@
/* ==========================================================================
ANIMATIONS
========================================================================== */
@-webkit-keyframes intro {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes intro {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}

View File

@ -0,0 +1,318 @@
/* ==========================================================================
ARCHIVE
========================================================================== */
.archive {
margin-bottom: 2em;
@include breakpoint($large) {
float: right;
width: calc(100% - #{$right-sidebar-width-narrow});
padding-right: $right-sidebar-width-narrow;
}
@include breakpoint($x-large) {
width: calc(100% - #{$right-sidebar-width});
padding-right: $right-sidebar-width;
}
a {
color: inherit;
text-decoration: none;
}
}
.archive__subtitle {
margin: 1.414em 0 0;
padding-bottom: 0.5em;
font-size: $type-size-5;
color: $muted-text-color;
border-bottom: 1px solid $border-color;
+ .list__item .archive__item-title {
margin-top: 0.5em;
}
}
.archive__item-title {
margin-bottom: 0.25em;
font-family: $sans-serif-narrow;
overflow: hidden;
text-overflow: ellipsis;
a + a {
opacity: 0.5;
}
}
/* remove border*/
.page__content {
.archive__item-title {
margin-top: 1em;
border-bottom: none;
}
}
.archive__item-excerpt {
margin-top: 0;
font-size: $type-size-6;
& + p {
text-indent: 0;
}
}
.archive__item-teaser {
border-radius: $border-radius;
overflow: hidden;
img {
width: 100%;
}
}
.archive__item:hover {
.archive__item-teaser {
box-shadow: 0 0 10px rgba(#000, 0.25);
}
.archive__item-title {
text-decoration: underline;
}
}
/*
List view
========================================================================== */
.list__item {
.page__meta {
margin: 0 0 4px;
}
}
/*
Grid view
========================================================================== */
.archive {
.grid__wrapper {
/* extend grid elements to the right */
@include breakpoint($large) {
margin-right: -1 * $right-sidebar-width-narrow;
}
@include breakpoint($x-large) {
margin-right: -1 * $right-sidebar-width;
}
}
}
.grid__item {
margin-bottom: 2em;
@include breakpoint($small) {
float: left;
width: span(5 of 10);
&:nth-child(2n+1) {
clear: both;
margin-left: 0;
}
&:nth-child(2n+2) {
clear: none;
margin-left: gutter(of 10);
}
}
@include breakpoint($medium) {
margin-left: 0; /* override margin*/
margin-right: 0; /* override margin*/
width: span(3 of 12);
&:nth-child(2n+1) {
clear: none;
}
&:nth-child(4n+1) {
clear: both;
}
&:nth-child(4n+2) {
clear: none;
margin-left: gutter(1 of 12);
}
&:nth-child(4n+3) {
clear: none;
margin-left: gutter(1 of 12);
}
&:nth-child(4n+4) {
clear: none;
margin-left: gutter(1 of 12);
}
}
.page__meta {
margin: 0 0 4px;
}
.archive__item-title {
margin-top: 0.5em;
font-size: $type-size-5;
}
.archive__item-excerpt {
display: none;
@include breakpoint($medium) {
display: block;
font-size: $type-size-6;
}
}
.archive__item-teaser {
@include breakpoint($small) {
max-height: 200px;
}
@include breakpoint($medium) {
max-height: 120px;
}
}
}
/*
Features
========================================================================== */
.feature__wrapper {
@include clearfix();
margin-bottom: 2em;
border-bottom: 1px solid $border-color;
}
.feature__item {
margin-bottom: 2em;
font-size: 1.25rem;
@include breakpoint($small) {
float: left;
margin-bottom: 0;
width: span(4 of 12);
&:nth-child(3n+1) {
clear: both;
margin-left: 0;
}
&:nth-child(3n+2) {
clear: none;
margin-left: gutter(of 12);
}
&:nth-child(3n+3) {
clear: none;
margin-left: gutter(of 12);
}
.feature__item-teaser {
max-height: 200px;
overflow: hidden;
}
}
&--left {
float: left;
margin-left: 0;
margin-right: 0;
width: 100%;
clear: both;
font-size: 1.25rem;
.archive__item-teaser {
margin-bottom: 2em;
}
@include breakpoint($small) {
.archive__item-teaser {
float: left;
width: span(5 of 12);
}
.archive__item-body {
float: right;
padding-left: gutter(0.5 of 12);
padding-right: gutter(1 of 12);
width: span(7 of 12);
}
}
}
&--right {
float: left;
margin-left: 0;
margin-right: 0;
width: 100%;
clear: both;
font-size: 1.25rem;
.archive__item-teaser {
margin-bottom: 2em;
}
@include breakpoint($small) {
text-align: right;
.archive__item-teaser {
float: right;
width: span(5 of 12);
}
.archive__item-body {
float: right;
width: span(7 of 12);
padding-left: gutter(0.5 of 12);
padding-right: gutter(1 of 12);
}
}
}
&--center {
float: left;
margin-left: 0;
margin-right: 0;
width: 100%;
clear: both;
font-size: 1.25rem;
.archive__item-teaser {
margin-bottom: 2em;
}
@include breakpoint($small) {
text-align: center;
.archive__item-teaser {
margin: 0 auto;
width: span(5 of 12);
}
.archive__item-body {
margin: 0 auto;
width: span(7 of 12);
}
}
}
}

View File

@ -0,0 +1,316 @@
/* ==========================================================================
BASE ELEMENTS
========================================================================== */
html {
/* sticky footer fix */
position: relative;
min-height: 100%;
}
body {
margin: 0;
padding: 0;
color: $text-color;
font-family: $global-font-family;
line-height: 1.5;
&.overflow--hidden {
/* when primary navigation is visible, the content in the background won't scroll */
overflow: hidden;
}
}
h1, h2, h3, h4, h5, h6 {
margin: 2em 0 0.5em;
line-height: 1.2;
font-family: $header-font-family;
font-weight: bold;
}
h1 {
margin-top: 0;
font-size: $type-size-3;
}
h2 {
font-size: $type-size-4;
}
h3 {
font-size: $type-size-5;
}
h4 {
font-size: $type-size-6;
}
h5 {
font-size: $type-size-6;
}
h6 {
font-size: $type-size-6;
}
small, .small {
font-size: $type-size-6;
}
p {
margin-bottom: 1.3em;
}
u,
ins {
text-decoration: none;
border-bottom: 1px solid $text-color;
a {
color: inherit;
}
}
del a {
color: inherit;
}
/* reduce orphans and widows when printing */
p, pre, blockquote, ul, ol, dl, figure, table, fieldset {
orphans: 3;
widows: 3;
}
/* abbreviations */
abbr[title],
abbr[data-original-title] {
text-decoration: none;
cursor: help;
border-bottom: 1px dotted $text-color;
}
/* blockquotes */
blockquote {
margin: 2em 1em 2em 0;
padding-left: 1em;
padding-right: 1em;
font-style: italic;
border-left: 0.25em solid $primary-color;
cite {
font-style: italic;
&:before {
content: "\2014";
padding-right: 5px;
}
}
}
/* links */
a {
&:focus {
@extend %tab-focus;
}
&:hover,
&:active {
color: $link-color-hover;
outline: 0;
}
&:visited {
color: $link-color-visited;
}
}
/* code */
tt, code, kbd, samp, pre {
font-family: $monospace;
}
pre {
overflow-x: auto; /* add scrollbars to wide code blocks*/
}
p > code,
a > code,
li > code,
figcaption > code,
td > code {
padding-top: 0.1rem;
padding-bottom: 0.1rem;
font-size: $type-size-6;
background: $code-background-color;
border: 1px solid $border-color;
border-radius: $border-radius;
box-shadow: $box-shadow;
&:before, &:after {
letter-spacing: -0.2em;
content: "\00a0"; /* non-breaking space*/
}
}
/* horizontal rule */
hr {
display: block;
margin: 1em 0;
border: 0;
border-top: 1px solid $border-color;
}
/* lists */
ul li,
ol li {
margin-bottom: 0.5em;
}
li ul,
li ol {
margin-top: 0.5em;
}
/*
Media and embeds
========================================================================== */
/* Figures and images */
figure {
display: -webkit-box;
display: flex;
-webkit-box-pack: justify;
justify-content: space-between;
-webkit-box-align: start;
align-items: flex-start;
flex-wrap: wrap;
margin: 2em 0;
img,
iframe,
.fluid-width-video-wrapper {
margin-bottom: 1em;
}
img {
width: 100%;
border-radius: $border-radius;
-webkit-transition: $global-transition;
transition: $global-transition;
}
> a {
display: block;
}
&.half {
> a,
> img {
@include breakpoint($small) {
width: calc(50% - 0.5em);
}
}
figcaption {
width: 100%;
}
}
&.third {
> a,
> img {
@include breakpoint($small) {
width: calc(33.3333% - 0.5em);
}
}
figcaption {
width: 100%;
}
}
}
/* Figure captions */
figcaption {
margin-bottom: 0.5em;
color: $muted-text-color;
font-family: $caption-font-family;
font-size: $type-size-6;
a {
-webkit-transition: $global-transition;
transition: $global-transition;
&:hover {
color: $link-color-hover;
}
}
}
/* Fix IE9 SVG bug */
svg:not(:root) {
overflow: hidden;
}
/*
Navigation lists
========================================================================== */
/**
* Removes margins, padding, and bullet points from navigation lists
*
* Example usage:
* <nav>
* <ul>
* <li><a href="#link-1">Link 1</a></li>
* <li><a href="#link-2">Link 2</a></li>
* <li><a href="#link-3">Link 3</a></li>
* </ul>
* </nav>
*/
nav {
ul {
margin: 0;
padding: 0;
}
li {
list-style: none;
}
a {
text-decoration: none;
}
/* override white-space for nested lists */
ul li,
ol li {
margin-bottom: 0;
}
li ul,
li ol {
margin-top: 0;
}
}
/*
Global animation transition
========================================================================== */
b, i, strong, em, blockquote, p, q, span, figure, img, h1, h2, header, input, a, tr, td, form button, input[type="submit"], .btn, .highlight, .archive__item-teaser {
-webkit-transition: $global-transition;
transition: $global-transition;
}

View File

@ -0,0 +1,98 @@
/* ==========================================================================
BUTTONS
========================================================================== */
/*
Default button
========================================================================== */
.btn {
/* default */
display: inline-block;
margin-bottom: 0.25em;
padding: 0.5em 1em;
font-family: $sans-serif;
font-size: $type-size-6;
font-weight: bold;
text-align: center;
text-decoration: none;
border-width: 0;
border-radius: $border-radius;
cursor: pointer;
.icon {
margin-right: 0.5em;
}
.icon + .hidden {
margin-left: -0.5em; /* override for hidden text*/
}
/* button colors */
$buttoncolors:
(primary, $primary-color),
(inverse, #fff),
(light-outline, transparent),
(success, $success-color),
(warning, $warning-color),
(danger, $danger-color),
(info, $info-color),
(facebook, $facebook-color),
(twitter, $twitter-color),
(google-plus, $google-plus-color),
(linkedin, $linkedin-color);
@each $buttoncolor, $color in $buttoncolors {
&--#{$buttoncolor} {
@include yiq-contrasted($color);
@if ($buttoncolor == inverse) {
border: 1px solid $border-color;
}
@if ($buttoncolor == light-outline) {
border: 1px solid #fff;
}
&:hover {
@include yiq-contrasted(mix(#000, $color, 20%));
}
&:visited {
@include yiq-contrasted($color);
}
}
}
/* fills width of parent container */
&--block {
display: block;
width: 100%;
+ .btn--block {
margin-top: 0.25em;
}
}
/* disabled */
&--disabled {
pointer-events: none;
cursor: not-allowed;
filter: alpha(opacity=65);
box-shadow: none;
opacity: 0.65;
}
/* extra large button */
&--x-large {
font-size: $type-size-4;
}
/* large button */
&--large {
font-size: $type-size-5;
}
/* small button */
&--small {
font-size: $type-size-7;
}
}

View File

@ -0,0 +1,83 @@
/* ==========================================================================
FOOTER
========================================================================== */
.page__footer {
@include clearfix;
float: left;
margin-left: 0;
margin-right: 0;
width: 100%;
clear: both;
/* sticky footer fix start */
position: absolute;
bottom: 0;
height: auto;
/* sticky footer fix end */
margin-top: 3em;
color: $muted-text-color;
-webkit-animation: $intro-transition;
animation: $intro-transition;
-webkit-animation-delay: 0.45s;
animation-delay: 0.45s;
background-color: $footer-background-color;
footer {
@include clearfix;
margin-left: auto;
margin-right: auto;
margin-top: 2em;
max-width: 100%;
padding: 0 1em 2em;
@include breakpoint($x-large) {
max-width: $x-large;
}
}
a {
color: inherit;
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
.fa {
color: $muted-text-color;
}
}
.page__footer-copyright {
font-family: $global-font-family;
font-size: $type-size-7;
}
.page__footer-follow {
ul {
margin: 0;
padding: 0;
list-style-type: none;
}
li {
display: inline-block;
padding-top: 5px;
padding-bottom: 5px;
font-family: $sans-serif-narrow;
font-size: $type-size-6;
text-transform: uppercase;
}
li + li:before {
content: "";
padding-right: 5px;
}
a {
padding-right: 10px;
font-weight: bold;
}
}

View File

@ -0,0 +1,389 @@
/* ==========================================================================
Forms
========================================================================== */
form {
margin: 0 0 5px 0;
padding: 1em;
background-color: $form-background-color;
fieldset {
margin-bottom: 5px;
padding: 0;
border-width: 0;
}
legend {
display: block;
width: 100%;
margin-bottom: 5px * 2;
*margin-left: -7px;
padding: 0;
color: $text-color;
border: 0;
white-space: normal;
}
p {
margin-bottom: 5px / 2;
}
ul {
list-style-type: none;
margin: 0 0 5px 0;
padding: 0;
}
br {
display: none;
}
}
label,
input,
button,
select,
textarea {
vertical-align: baseline;
*vertical-align: middle;
}
input,
button,
select,
textarea {
box-sizing: border-box;
font-family: $sans-serif;
}
label {
display: block;
margin-bottom: 0.25em;
color: $text-color;
cursor: pointer;
small {
font-size: $type-size-6;
}
input,
textarea,
select {
display: block;
}
}
input,
textarea,
select {
display: inline-block;
width: 100%;
padding: 0.25em;
margin-bottom: 0.5em;
color: $text-color;
background-color: $background-color;
border: $border-color;
border-radius: $border-radius;
box-shadow: $box-shadow;
}
.input-mini {
width: 60px;
}
.input-small {
width: 90px;
}
input[type="image"],
input[type="checkbox"],
input[type="radio"] {
width: auto;
height: auto;
padding: 0;
margin: 3px 0;
*margin-top: 0;
line-height: normal;
cursor: pointer;
border-radius: 0;
border: 0 \9;
}
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box;
padding: 0;
*width: 13px;
*height: 13px;
}
input[type="image"] {
border: 0;
box-shadow: none;
}
input[type="file"] {
width: auto;
padding: initial;
line-height: initial;
border: initial;
background-color: transparent;
background-color: initial;
box-shadow: none;
}
input[type="button"],
input[type="reset"],
input[type="submit"] {
width: auto;
height: auto;
cursor: pointer;
*overflow: visible;
}
select,
input[type="file"] {
*margin-top: 4px;
}
select {
width: auto;
background-color: #fff;
}
select[multiple],
select[size] {
height: auto;
}
textarea {
resize: vertical;
height: auto;
overflow: auto;
vertical-align: top;
}
input[type="hidden"] {
display: none;
}
.form {
position: relative;
}
.radio,
.checkbox {
padding-left: 18px;
font-weight: normal;
}
.radio input[type="radio"],
.checkbox input[type="checkbox"] {
float: left;
margin-left: -18px;
}
.radio.inline,
.checkbox.inline {
display: inline-block;
padding-top: 5px;
margin-bottom: 0;
vertical-align: middle;
}
.radio.inline + .radio.inline,
.checkbox.inline + .checkbox.inline {
margin-left: 10px;
}
/*
Disabled state
========================================================================== */
input[disabled],
select[disabled],
textarea[disabled],
input[readonly],
select[readonly],
textarea[readonly] {
opacity: 0.5;
cursor: not-allowed;
}
/*
Focus & active state
========================================================================== */
input:focus,
textarea:focus {
border-color: $primary-color;
outline: 0;
outline: thin dotted \9;
box-shadow: inset 0 1px 3px rgba($text-color, 0.06), 0 0 5px rgba($primary-color, 0.7);
}
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus,
select:focus {
box-shadow: none;
}
/*
Help text
========================================================================== */
.help-block,
.help-inline {
color: $muted-text-color;
}
.help-block {
display: block;
margin-bottom: 1em;
line-height: 1em;
}
.help-inline {
display: inline-block;
vertical-align: middle;
padding-left: 5px;
}
/*
.form-inline
========================================================================== */
.form-inline input,
.form-inline textarea,
.form-inline select {
display: inline-block;
margin-bottom: 0;
}
.form-inline label {
display: inline-block;
}
.form-inline .radio,
.form-inline .checkbox,
.form-inline .radio {
padding-left: 0;
margin-bottom: 0;
vertical-align: middle;
}
.form-inline .radio input[type="radio"],
.form-inline .checkbox input[type="checkbox"] {
float: left;
margin-left: 0;
margin-right: 3px; }
/*
.form-search
========================================================================== */
.form-search input,
.form-search textarea,
.form-search select {
display: inline-block;
margin-bottom: 0;
}
.form-search .search-query {
padding-left: 14px;
padding-right: 14px;
margin-bottom: 0;
border-radius: 14px;
}
.form-search label {
display: inline-block;
}
.form-search .radio,
.form-search .checkbox,
.form-inline .radio {
padding-left: 0;
margin-bottom: 0;
vertical-align: middle;
}
.form-search .radio input[type="radio"],
.form-search .checkbox input[type="checkbox"] {
float: left;
margin-left: 0;
margin-right: 3px;
}
/*
.form--loading
========================================================================== */
.form--loading:before {
content: '';
}
.form--loading .form__spinner {
display: block;
}
.form:before {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(255, 255, 255, 0.7);
z-index: 10;
}
.form__spinner {
display: none;
position: absolute;
top: 50%;
left: 50%;
z-index: 11;
}
/*
Google search form
========================================================================== */
#goog-fixurl {
ul {
list-style: none;
margin-left: 0;
padding-left: 0;
li {
list-style-type: none;
}
}
}
#goog-wm-qt {
width: auto;
margin-right: 10px;
margin-bottom: 20px;
padding: 8px 20px;
display: inline-block;
font-size: $type-size-6;
background-color: #fff;
color: #000;
border-width: 2px !important;
border-style: solid !important;
border-color: $border-color;
border-radius: $border-radius;
}
#goog-wm-sb {
@extend .btn;
}

View File

@ -0,0 +1,83 @@
/* ==========================================================================
MASTHEAD
========================================================================== */
.masthead {
position: relative;
border-bottom: 1px solid $border-color;
-webkit-animation: $intro-transition;
animation: $intro-transition;
-webkit-animation-delay: 0.15s;
animation-delay: 0.15s;
z-index: 20;
&__inner-wrap {
@include clearfix;
margin-left: auto;
margin-right: auto;
padding: 1em;
max-width: 100%;
display: -webkit-box;
display: flex;
-webkit-box-pack: justify;
justify-content: space-between;
font-family: $sans-serif-narrow;
@include breakpoint($x-large) {
max-width: $x-large;
}
nav {
z-index: 10;
}
a {
text-decoration: none;
}
}
}
.site-title {
display: -webkit-box;
display: flex;
padding: 0.5rem 0;
align-self: stretch;
-webkit-box-align: center;
align-items: center;
font-weight: bold;
z-index: 20;
}
.masthead__menu {
float: left;
margin-left: 0;
margin-right: 0;
width: 100%;
clear: both;
.site-nav {
margin-left: 0;
@include breakpoint($small) {
float: right;
}
}
ul {
margin: 0;
padding: 0;
clear: both;
list-style-type: none;
}
}
.masthead__menu-item {
display: block;
list-style-type: none;
white-space: nowrap;
&--lg {
padding-right: 2em;
font-weight: 700;
}
}

View File

@ -0,0 +1,92 @@
/* ==========================================================================
MIXINS
========================================================================== */
%tab-focus {
/* Default*/
outline: thin dotted $warning-color;
/* Webkit*/
outline: 5px auto $warning-color;
outline-offset: -2px;
}
/*
em function
========================================================================== */
@function em($target, $context: $doc-font-size) {
@return ($target / $context) * 1em;
}
/*
Bourbon clearfix
========================================================================== */
/*
* Provides an easy way to include a clearfix for containing floats.
* link http://cssmojo.com/latest_new_clearfix_so_far/
*
* example scss - Usage
*
* .element {
* @include clearfix;
* }
*
* example css - CSS Output
*
* .element::after {
* clear: both;
* content: "";
* display: table;
* }
*/
@mixin clearfix {
clear: both;
&::after {
clear: both;
content: "";
display: table;
}
}
/*
Compass YIQ Color Contrast
https://github.com/easy-designs/yiq-color-contrast
========================================================================== */
@function yiq-is-light(
$color,
$threshold: $yiq-contrasted-threshold
) {
$red: red($color);
$green: green($color);
$blue: blue($color);
$yiq: (($red*299)+($green*587)+($blue*114))/1000;
@if $yiq-debug { @debug $yiq, $threshold; }
@return if($yiq >= $threshold, true, false);
}
@function yiq-contrast-color(
$color,
$dark: $yiq-contrasted-dark-default,
$light: $yiq-contrasted-light-default,
$threshold: $yiq-contrasted-threshold
) {
@return if(yiq-is-light($color, $threshold), $yiq-contrasted-dark-default, $yiq-contrasted-light-default);
}
@mixin yiq-contrasted(
$background-color,
$dark: $yiq-contrasted-dark-default,
$light: $yiq-contrasted-light-default,
$threshold: $yiq-contrasted-threshold
) {
background-color: $background-color;
color: yiq-contrast-color($background-color, $dark, $light, $threshold);
}

View File

@ -0,0 +1,569 @@
/* ==========================================================================
NAVIGATION
========================================================================== */
/*
Breadcrumb navigation links
========================================================================== */
.breadcrumbs {
@include clearfix;
margin: 0 auto;
max-width: 100%;
padding-left: 2em;
padding-right: 2em;
font-family: $sans-serif;
-webkit-animation: $intro-transition;
animation: $intro-transition;
-webkit-animation-delay: 0.30s;
animation-delay: 0.30s;
@include breakpoint($large) {
padding-left: 1em;
padding-right: 1em;
}
@include breakpoint($x-large) {
max-width: $x-large;
}
ol {
padding: 0;
list-style: none;
font-size: $type-size-6;
@include breakpoint($large) {
float: right;
width: span(10 of 12);
}
@include breakpoint($x-large) {
padding-left: gutter(0.5 of 12);
}
}
li {
display: inline;
}
.current {
font-weight: bold;
}
}
/*
Post pagination navigation links
========================================================================== */
.pagination {
@include clearfix();
float: left;
margin-top: 1em;
padding-top: 1em;
width: 100%;
ul {
margin: 0;
padding: 0;
list-style-type: none;
font-family: $sans-serif;
}
li {
display: block;
float: left;
margin-left: -1px;
a {
display: block;
margin-bottom: 0.25em;
padding: 0.5em 1em;
font-family: $sans-serif;
font-size: 14px;
font-weight: bold;
line-height: 1.5;
text-align: center;
text-decoration: none;
color: $muted-text-color;
border: 1px solid mix(#000, $border-color, 25%);
border-radius: 0;
&:hover {
color: $link-color-hover;
}
&.current,
&.current.disabled {
color: #fff;
background: $primary-color;
}
&.disabled {
color: rgba($muted-text-color, 0.5);
pointer-events: none;
cursor: not-allowed;
}
}
&:first-child {
margin-left: 0;
a {
border-top-left-radius: $border-radius;
border-bottom-left-radius: $border-radius;
}
}
&:last-child {
a {
border-top-right-radius: $border-radius;
border-bottom-right-radius: $border-radius;
}
}
}
/* next/previous buttons */
&--pager {
display: block;
padding: 1em 2em;
float: left;
width: 50%;
font-family: $sans-serif;
font-size: $type-size-5;
font-weight: bold;
text-align: center;
text-decoration: none;
color: $muted-text-color;
border: 1px solid mix(#000, $border-color, 25%);
border-radius: $border-radius;
&:hover {
@include yiq-contrasted($muted-text-color);
}
&:first-child {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
&:last-child {
margin-left: -1px;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
&.disabled {
color: rgba($muted-text-color, 0.5);
pointer-events: none;
cursor: not-allowed;
}
}
}
.page__content + .pagination,
.page__meta + .pagination,
.page__share + .pagination,
.page__comments + .pagination {
margin-top: 2em;
padding-top: 2em;
border-top: 1px solid $border-color;
}
/*
Priority plus navigation
========================================================================== */
.greedy-nav {
position: relative;
display: -webkit-box;
display: flex;
-webkit-box-align: center;
align-items: center;
background: $background-color;
a {
display: block;
margin: 0 1rem;
padding: 0.5rem 0;
color: $masthead-link-color;
text-decoration: none;
&:hover {
color: $masthead-link-color-hover;
}
&.site-title {
margin-left: 0;
}
}
button {
padding: 0 0.5rem;
align-self: stretch;
border: 0;
outline: none;
color: #fff;
background: transparent;
cursor: pointer;
}
.visible-links {
display: -webkit-box;
display: flex;
-webkit-box-pack: end;
-webkit-box-flex: 1;
flex: 1;
padding-right: 2rem;
overflow: hidden;
li {
-webkit-box-flex: 0;
flex: none;
&:first-child {
a {
margin-left: 0;
}
}
&:last-child {
a {
margin-right: 0;
}
}
}
a {
position: relative;
&:before {
content: "";
position: absolute;
left: 0;
bottom: 0;
height: 4px;
background: $primary-color;
width: 100%;
-webkit-transition: $global-transition;
transition: $global-transition;
-webkit-transform: scaleX(0) translate3d(0, 0 , 0);
transform: scaleX(0) translate3d(0, 0 , 0); /* hide*/
}
&:hover:before {
-webkit-transform: scaleX(1);
-ms-transform: scaleX(1);
transform: scaleX(1); /* reveal*/
}
}
}
.links-menu{
right: 2.5rem;
}
.lang-menu{
right: .2rem;
}
.hidden-links {
position: absolute;
top: 100%;
margin-top: 15px;
padding: 5px;
border: 1px solid $border-color;
border-radius: $border-radius;
background: $background-color;
box-shadow: 0 2px 4px 0 rgba(#000, 0.16), 0 2px 10px 0 rgba(#000, 0.12);
&.hidden {
display: none;
}
a {
margin: 0;
padding: 10px 20px;
font-size: $type-size-5;
&:hover {
color: $masthead-link-color-hover;
background: $navicon-link-color-hover;
}
}
&:before {
content: "";
position: absolute;
top: -11px;
right: 5px;
width: 0;
border-style: solid;
border-width: 0 10px 10px;
border-color: $border-color transparent;
display: block;
z-index: 0;
}
&:after {
content: "";
position: absolute;
top: -10px;
right: 5px;
width: 0;
border-style: solid;
border-width: 0 10px 10px;
border-color: $background-color transparent;
display: block;
z-index: 1;
}
li {
display: block;
border-bottom: 1px solid $border-color;
&:last-child {
border-bottom: none;
}
}
}
}
/*
Navigation list
========================================================================== */
.nav__list {
margin-bottom: 1.5em;
input[type="checkbox"],
label {
display: none;
}
@include breakpoint(max-width ($large - 1px)) {
label {
position: relative;
display: inline-block;
padding: 0.5em 2.5em 0.5em 1em;
font-size: $type-size-6;
font-weight: bold;
border: 1px solid $light-gray;
border-radius: $border-radius;
z-index: 20;
-webkit-transition: 0.2s ease-out;
transition: 0.2s ease-out;
cursor: pointer;
&:before,
&:after {
content: '';
position: absolute;
right: 1em;
top: 1.25em;
width: 0.75em;
height: 0.125em;
line-height: 1;
background-color: $gray;
-webkit-transition: 0.2s ease-out;
transition: 0.2s ease-out;
}
&:after {
-webkit-transform: rotate(90deg);
-ms-transform: rotate(90deg);
transform: rotate(90deg);
}
&:hover {
color: #fff;
border-color: $gray;
background-color: mix(white, #000, 20%);
&:before,
&:after {
background-color: #fff;
}
}
}
/* selected*/
input:checked + label {
color: white;
background-color: mix(white, #000, 20%);
&:before,
&:after {
background-color: #fff;
}
}
/* on hover show expand*/
label:hover:after {
-webkit-transform: rotate(90deg);
-ms-transform: rotate(90deg);
transform: rotate(90deg);
}
input:checked + label:hover:after {
-webkit-transform: rotate(0);
-ms-transform: rotate(0);
transform: rotate(0);
}
ul {
margin-bottom: 1em;
}
a {
display: block;
padding: 0.25em 0;
@include breakpoint($large) {
padding-top: 0.125em;
padding-bottom: 0.125em;
}
&:hover {
text-decoration: underline;
}
}
}
}
.nav__list .nav__items {
margin: 0;
font-size: 1.4rem;
a {
color: inherit;
line-height: 1.6;
}
ol {
padding-left: 0.9rem;
}
li {
list-style: inherit;
}
.active {
font-weight: bold;
}
.completed {
color: $gray;
text-decoration: line-through;
}
@include breakpoint(max-width ($large - 1px)) {
position: relative;
max-height: 0;
opacity: 0%;
overflow: hidden;
z-index: 10;
-webkit-transition: 0.3s ease-in-out;
transition: 0.3s ease-in-out;
-webkit-transform: translate(0, 10%);
-ms-transform: translate(0, 10%);
transform: translate(0, 10%);
}
}
@include breakpoint(max-width ($large - 1px)) {
.nav__list input:checked ~ .nav__items {
-webkit-transition: 0.5s ease-in-out;
transition: 0.5s ease-in-out;
max-height: 9999px; /* exaggerate max-height to accommodate tall lists*/
overflow: visible;
opacity: 1;
margin-top: 1em;
-webkit-transform: translate(0, 0);
-ms-transform: translate(0, 0);
transform: translate(0, 0);
}
}
.nav__title {
margin: 0;
padding: 0.5rem 1rem;
font-family: $sans-serif-narrow;
font-size: $type-size-5;
font-weight: bold;
}
.nav__sub-title {
display: block;
margin: 0.5rem 0;
padding: 0.5rem 0;
font-family: $sans-serif-narrow;
font-size: $type-size-6;
font-weight: bold;
text-transform: uppercase;
border-bottom: 1px solid $border-color;
}
/*
Table of contents navigation
========================================================================== */
.toc {
font-family: $sans-serif-narrow;
color: $gray;
text-transform: uppercase;
letter-spacing: 1px;
background-color: $background-color;
border: 1px solid $border-color;
border-radius: $border-radius;
box-shadow: $box-shadow;
.nav__title {
color: #fff;
font-size: $type-size-6;
background: $primary-color;
border-top-left-radius: $border-radius;
border-top-right-radius: $border-radius;
}
}
.toc__menu {
margin: 0;
padding: 0;
width: 100%;
list-style: none;
font-size: 1rem;
a {
display: block;
padding: 0.5rem 1rem;
color: $text-color;
font-size: $type-size-7;
font-weight: bold;
line-height: 1.5;
border-bottom: 1px solid $border-color;
}
> li:last-child {
a {
border-bottom: none;
}
}
li ul > li a {
padding-left: 1.75rem;
font-weight: normal;
}
/* hide sub sub links on small screens*/
li > ul li {
display: none;
@include breakpoint($medium) {
display: block;
}
}
}

View File

@ -0,0 +1,97 @@
/* ==========================================================================
NOTICE TEXT BLOCKS
========================================================================== */
/**
* Default Kramdown usage (no indents!):
* <div class="notice" markdown="1">
* #### Headline for the Notice
* Text for the notice
* </div>
*/
@mixin notice($notice-color) {
margin: 2em 0 !important; /* override*/
padding: 1em;
font-family: $global-font-family;
font-size: $type-size-6 !important;
text-indent: initial; /* override*/
font-weight: bold;
background-color: mix($background-color, $notice-color, 45%);
border-radius: $border-radius;
box-shadow: 0 1px 1px rgba($notice-color, 0.25);
h4 {
margin-top: 0 !important; /* override*/
margin-bottom: 0.75em;
}
@at-root .page__content #{&} h4 {
/* using at-root to override .page-content h4 font size*/
margin-bottom: 0;
font-size: 1em;
}
p {
&:last-child {
margin-bottom: 0 !important; /* override*/
}
}
h4 + p {
/* remove space above paragraphs that appear directly after notice headline*/
margin-top: 0;
padding-top: 0;
}
a {
color: mix(#fff, $notice-color, 30%);
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
ul {
&:last-child {
margin-bottom: 0; /* override*/
}
}
}
/* Default notice */
.notice {
@include notice($light-gray);
}
/* Primary notice */
.notice--primary {
@include notice($primary-color);
}
/* Info notice */
.notice--info {
@include notice($info-color);
}
/* Warning notice */
.notice--warning {
@include notice($warning-color);
}
/* Success notice */
.notice--success {
@include notice($success-color);
}
/* Danger notice */
.notice--danger {
@include notice($danger-color);
}

View File

@ -0,0 +1,431 @@
/* ==========================================================================
SINGLE PAGE/POST
========================================================================== */
#main {
@include clearfix;
margin-left: auto;
margin-top: 2em;
margin-right: auto;
padding-left: 1em;
padding-right: 1em;
-webkit-animation: $intro-transition;
animation: $intro-transition;
max-width: 100%;
-webkit-animation-delay: 0.35s;
animation-delay: 0.35s;
@include breakpoint($x-large) {
max-width: $x-large;
}
}
.page {
@include breakpoint($large) {
float: right;
width: calc(100% - #{$right-sidebar-width-narrow});
padding-right: $right-sidebar-width-narrow;
}
@include breakpoint($x-large) {
width: calc(100% - #{$right-sidebar-width});
padding-right: $right-sidebar-width;
}
.page__inner-wrap {
float: left;
margin-left: 0;
margin-right: 0;
width: 100%;
clear: both;
.page__content,
.page__meta,
.page__share {
position: relative;
float: left;
margin-left: 0;
margin-right: 0;
width: 100%;
clear: both;
}
}
}
.page__title {
margin-top: 0;
line-height: 1;
& + .page__meta {
margin-top: -0.5em;
}
}
.page__lead {
font-family: $global-font-family;
font-size: $type-size-4;
}
.page__content {
h2 {
padding-bottom: 0.5em;
border-bottom: 1px solid $border-color;
}
p, li, dl {
font-size: .85em;
}
/* paragraph indents */
p {
margin: 0 0 $indent-var;
/* sibling indentation*/
@if $paragraph-indent == true {
& + p {
text-indent: $indent-var;
margin-top: -($indent-var);
}
}
}
a:not(.btn) {
&:hover {
text-decoration: underline;
img {
box-shadow: 0 0 10px rgba(#000, 0.25);
}
}
}
dt {
margin-top: 1em;
font-family: $sans-serif;
font-weight: bold;
}
dd {
margin-left: 1em;
font-family: $sans-serif;
font-size: $type-size-6;
}
.small {
font-size: $type-size-6;
}
/* blockquote citations */
blockquote + .small {
margin-top: -1.5em;
padding-left: 1.25rem;
}
}
.page__hero {
position: relative;
margin-bottom: 2em;
@include clearfix;
-webkit-animation: $intro-transition;
animation: $intro-transition;
-webkit-animation-delay: 0.25s;
animation-delay: 0.25s;
&--overlay {
position: relative;
margin-bottom: 2em;
padding: 3em 0;
@include clearfix;
background-size: cover;
background-repeat: no-repeat;
background-position: center;
-webkit-animation: $intro-transition;
animation: $intro-transition;
-webkit-animation-delay: 0.25s;
animation-delay: 0.25s;
a {
color: #fff;
}
.wrapper {
padding-left: 1em;
padding-right: 1em;
@include breakpoint($x-large) {
max-width: $x-large;
}
}
.page__title,
.page__meta,
.page__lead,
.btn {
color: #fff;
text-shadow: 1px 1px 4px rgba(#000, 0.5);
}
.page__lead {
max-width: $medium;
}
.page__title {
font-size: $type-size-2;
@include breakpoint($small) {
font-size: $type-size-1;
}
}
}
}
.page__hero-image {
width: 100%;
height: auto;
-ms-interpolation-mode: bicubic;
}
.page__hero-caption {
position: absolute;
bottom: 0;
right: 0;
margin: 0 auto;
padding: 2px 5px;
color: #fff;
font-family: $caption-font-family;
font-size: $type-size-7;
background: #000;
text-align: right;
z-index: 5;
opacity: 0.5;
border-radius: $border-radius 0 0 0;
@include breakpoint($large) {
padding: 5px 10px;
}
a {
color: #fff;
text-decoration: none;
}
}
/*
Social sharing
========================================================================== */
.page__share {
margin-top: 2em;
padding-top: 1em;
border-top: 1px solid $border-color;
@include breakpoint(max-width $small) {
.btn span {
border: 0;
clip: rect(0 0 0 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
}
}
.page__share-title {
margin-bottom: 10px;
font-size: $type-size-6;
text-transform: uppercase;
}
/*
Page meta
========================================================================== */
.page__meta {
margin-top: 2em;
color: $muted-text-color;
font-family: $sans-serif;
font-size: $type-size-6;
p {
margin: 0;
}
a {
color: inherit;
}
}
.page__meta-title {
margin-bottom: 10px;
font-size: $type-size-6;
text-transform: uppercase;
}
/*
Page taxonomy
========================================================================== */
.page__taxonomy {
.sep {
display: none;
}
strong {
margin-right: 10px;
}
}
.page__taxonomy-item {
display: inline-block;
margin-right: 5px;
margin-bottom: 8px;
padding: 5px 10px;
text-decoration: none;
border: 1px solid mix(#000, $border-color, 25%);
border-radius: $border-radius;
&:hover {
text-decoration: none;
color: $link-color-hover;
}
}
/*
Comments
========================================================================== */
.page__comments {
float: left;
margin-left: 0;
margin-right: 0;
width: 100%;
clear: both;
}
.page__comments-title {
margin-top: 2rem;
margin-bottom: 10px;
padding-top: 2rem;
font-size: $type-size-6;
border-top: 1px solid $border-color;
text-transform: uppercase;
}
.page__comments-form {
-webkit-transition: $global-transition;
transition: $global-transition;
&.disabled {
input,
button,
textarea,
label {
pointer-events: none;
cursor: not-allowed;
filter: alpha(opacity=65);
box-shadow: none;
opacity: 0.65;
}
}
}
.comment {
@include clearfix();
margin: 1em 0;
&:not(:last-child) {
border-bottom: 1px solid $border-color;
}
}
.comment__avatar-wrapper {
float: left;
width: 60px;
height: 60px;
@include breakpoint($large) {
width: 100px;
height: 100px;
}
}
.comment__avatar {
width: 40px;
height: 40px;
border-radius: 50%;
@include breakpoint($large) {
width: 80px;
height: 80px;
padding: 5px;
border: 1px solid $border-color;
}
}
.comment__content-wrapper {
float: right;
width: calc(100% - 60px);
@include breakpoint($large) {
width: calc(100% - 100px);
}
}
.comment__author {
margin: 0;
a {
text-decoration: none;
}
}
.comment__date {
@extend .page__meta;
margin: 0;
a {
text-decoration: none;
}
}
/*
Related
========================================================================== */
.page__related {
@include clearfix();
float: left;
margin-top: 2em;
padding-top: 1em;
border-top: 1px solid $border-color;
@include breakpoint($large) {
float: right;
width: calc(100% - #{$right-sidebar-width-narrow});
}
@include breakpoint($x-large) {
width: calc(100% - #{$right-sidebar-width});
}
a {
color: inherit;
text-decoration: none;
}
}
.page__related-title {
margin-bottom: 10px;
font-size: $type-size-6;
text-transform: uppercase;
}

View File

@ -0,0 +1,252 @@
/* ==========================================================================
PRINT STYLES
========================================================================== */
@media print {
[hidden] {
display: none;
}
* {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
html {
margin: 0;
padding: 0;
min-height: auto !important;
font-size: 16px;
}
body {
margin: 0 auto;
background: #fff !important;
color: #000 !important;
font-size: 1rem;
line-height: 1.5;
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
h1,
h2,
h3,
h4,
h5,
h6 {
color: #000;
line-height: 1.2;
margin-bottom: 0.75rem;
margin-top: 0;
}
h1 {
font-size: 2.5rem;
}
h2 {
font-size: 2rem;
}
h3 {
font-size: 1.75rem;
}
h4 {
font-size: 1.5rem;
}
h5 {
font-size: 1.25rem;
}
h6 {
font-size: 1rem;
}
a,
a:visited {
color: #000;
text-decoration: underline;
word-wrap: break-word;
}
table {
border-collapse: collapse;
}
thead {
display: table-header-group;
}
table,
th,
td {
border-bottom: 1px solid #000;
}
td,
th {
padding: 8px 16px;
}
img {
border: 0;
display: block;
max-width: 100% !important;
vertical-align: middle;
}
hr {
border: 0;
border-bottom: 2px solid #bbb;
height: 0;
margin: 2.25rem 0;
padding: 0;
}
dt {
font-weight: bold;
}
dd {
margin: 0;
margin-bottom: 0.75rem;
}
abbr[title],
acronym[title] {
border: 0;
text-decoration: none;
}
table,
blockquote,
pre,
code,
figure,
li,
hr,
ul,
ol,
a,
tr {
page-break-inside: avoid;
}
h2,
h3,
h4,
p,
a {
orphans: 3;
widows: 3;
}
h1,
h2,
h3,
h4,
h5,
h6 {
page-break-after: avoid;
page-break-inside: avoid;
}
h1 + p,
h2 + p,
h3 + p {
page-break-before: avoid;
}
img {
page-break-after: auto;
page-break-before: auto;
page-break-inside: avoid;
}
pre {
white-space: pre-wrap !important;
word-wrap: break-word;
}
a[href^='http://']:after,
a[href^='https://']:after,
a[href^='ftp://']:after {
content: " (" attr(href) ")";
font-size: 80%;
}
abbr[title]:after,
acronym[title]:after {
content: " (" attr(title) ")";
}
#main {
max-width: 100%;
}
.page {
margin: 0;
padding: 0;
width: 100%;
}
.page-break,
.page-break-before {
page-break-before: always;
}
.page-break-after {
page-break-after: always;
}
.no-print {
display: none;
}
a.no-reformat:after {
content: '';
}
abbr[title].no-reformat:after,
acronym[title].no-reformat:after {
content: '';
}
.page__hero-caption {
color: #000 !important;
background: #fff !important;
opacity: 1;
a {
color: #000 !important;
}
}
/*
Hide the following elements on print
========================================================================== */
.masthead,
.toc,
.page__share,
.page__related,
.pagination,
.ads,
.page__footer,
.page__comments-form,
.author__avatar,
.author__content,
.author__urls-wrapper,
.nav__list,
.sidebar,
.adsbygoogle {
display: none !important;
height: 1px !important;
}
}

View File

@ -0,0 +1,187 @@
/* ==========================================================================
STYLE RESETS
========================================================================== */
* { box-sizing: border-box; }
html {
/* apply a natural box layout model to all elements */
box-sizing: border-box;
background-color: $background-color;
font-size: 16px;
@include breakpoint($medium) {
font-size: 18px;
}
@include breakpoint($large) {
font-size: 20px;
}
@include breakpoint($x-large) {
font-size: 22px;
}
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
/* Remove margin */
body { margin: 0; }
/* Selected elements */
::-moz-selection {
color: #fff;
background: #000;
}
::selection {
color: #fff;
background: #000;
}
/* Display HTML5 elements in IE6-9 and FF3 */
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section {
display: block;
}
/* Display block in IE6-9 and FF3 */
audio,
canvas,
video {
display: inline-block;
*display: inline;
*zoom: 1;
}
/* Prevents modern browsers from displaying 'audio' without controls */
audio:not([controls]) {
display: none;
}
a {
color: $link-color;
}
/* Apply focus state */
a:focus {
@extend %tab-focus;
}
/* Remove outline from links */
a:hover,
a:active {
outline: 0;
}
/* Prevent sub and sup affecting line-height in all browsers */
sub,
sup {
position: relative;
font-size: 75%;
line-height: 0;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* img border in anchor's and image quality */
img {
/* Responsive images (ensure images don't scale beyond their parents) */
max-width: 100%; /* part 1: Set a maximum relative to the parent*/
width: auto\9; /* IE7-8 need help adjusting responsive images*/
height: auto; /* part 2: Scale the height according to the width, otherwise you get stretching*/
vertical-align: middle;
border: 0;
-ms-interpolation-mode: bicubic;
}
/* Prevent max-width from affecting Google Maps */
#map_canvas img,
.google-maps img {
max-width: none;
}
/* Consistent form font size in all browsers, margin changes, misc */
button,
input,
select,
textarea {
margin: 0;
font-size: 100%;
vertical-align: middle;
}
button,
input {
*overflow: visible; /* inner spacing ie IE6/7*/
line-height: normal; /* FF3/4 have !important on line-height in UA stylesheet*/
}
button::-moz-focus-inner,
input::-moz-focus-inner { /* inner padding and border oddities in FF3/4*/
padding: 0;
border: 0;
}
button,
html input[type="button"], // avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; /* corrects inability to style clickable `input` types in iOS*/
cursor: pointer; /* improves usability and consistency of cursor style between image-type `input` and others*/
}
label,
select,
button,
input[type="button"],
input[type="reset"],
input[type="submit"],
input[type="radio"],
input[type="checkbox"] {
cursor: pointer; /* improves usability and consistency of cursor style between image-type `input` and others*/
}
input[type="search"] { /* Appearance in Safari/Chrome*/
box-sizing: content-box;
-webkit-appearance: textfield;
}
input[type="search"]::-webkit-search-decoration,
input[type="search"]::-webkit-search-cancel-button {
-webkit-appearance: none; /* inner-padding issues in Chrome OSX, Safari 5*/
}
textarea {
overflow: auto; /* remove vertical scrollbar in IE6-9*/
vertical-align: top; /* readability and alignment cross-browser*/
}

View File

@ -0,0 +1,265 @@
/* ==========================================================================
SIDEBAR
========================================================================== */
/*
Default
========================================================================== */
.sidebar {
@include clearfix();
margin-bottom: 1em;
-webkit-transform: translate3d(0, 0 , 0);
transform: translate3d(0, 0 , 0);
@include breakpoint(max-width $large) {
/* fix z-index order of follow links */
position: relative;
z-index: 10;
}
@include breakpoint($large) {
float: left;
width: calc(#{$right-sidebar-width-narrow} - 1em);
opacity: 1;
-webkit-transition: opacity 0.2s ease-in-out;
transition: opacity 0.2s ease-in-out;
a {
&:hover {
text-decoration: underline;
}
}
&.sticky {
overflow-y: auto;
/* calculate height of nav list */
height: calc(100vh - 90px - 2em); // viewport height - approx. masthead height - main content top margin
}
}
@include breakpoint($x-large) {
width: calc(#{$right-sidebar-width} - 1em);
}
h2, h3, h4, h5, h6 {
margin-bottom: 0;
font-family: $sans-serif-narrow;
}
p, li {
font-family: $sans-serif;
font-size: $type-size-6;
line-height: 1.5;
}
img {
width: 100%;
}
}
.sidebar__right {
margin-bottom: 1em;
@include breakpoint($large) {
position: absolute;
top: 0;
right: 0;
width: $right-sidebar-width-narrow;
margin-right: -1 * $right-sidebar-width-narrow;
padding-left: 1em;
z-index: 10;
}
@include breakpoint($x-large) {
width: $right-sidebar-width;
margin-right: -1 * $right-sidebar-width;
}
}
.splash .sidebar__right {
@include breakpoint($large) {
position: relative;
float: right;
margin-right: 0;
}
@include breakpoint($x-large) {
margin-right: 0;
}
}
/*
Author profile and links
========================================================================== */
.author__avatar {
display: table-cell;
vertical-align: top;
width: 36px;
height: 36px;
@include breakpoint($large) {
display: block;
width: auto;
height: auto;
}
img {
max-width: 110px;
border-radius: 50%;
@include breakpoint($large) {
padding: 5px;
border: 1px solid $border-color;
}
}
}
.author__content {
display: table-cell;
vertical-align: top;
padding-left: 15px;
padding-right: 25px;
line-height: 1;
@include breakpoint($large) {
display: block;
width: 100%;
padding-left: 0;
padding-right: 0;
}
}
.author__name {
margin: 0;
@include breakpoint($large) {
margin-top: 10px;
margin-bottom: 10px;
}
}
.sidebar .author__name {
font-family: $sans-serif;
font-size: $type-size-5;
}
.author__bio {
margin: 0;
@include breakpoint($large) {
margin-top: 10px;
margin-bottom: 20px;
}
}
.author__urls-wrapper {
position: relative;
display: table-cell;
vertical-align: middle;
font-family: $sans-serif;
z-index: 10;
position: relative;
cursor: pointer;
li:last-child {
a {
margin-bottom: 0;
}
}
@include breakpoint($large) {
display: block;
}
button {
margin-bottom: 0;
@include breakpoint($large) {
display: none;
}
}
}
.author__urls {
display: none;
position: absolute;
right: 0;
margin-top: 15px;
padding: 10px;
list-style-type: none;
border: 1px solid $border-color;
border-radius: $border-radius;
background: $background-color;
z-index: -1;
box-shadow: 0 2px 4px 0 rgba(#000, 0.16), 0 2px 10px 0 rgba(#000, 0.12);
cursor: default;
&.is--visible {
display: block;
}
@include breakpoint($large) {
display: block;
position: relative;
margin: 0;
padding: 0;
border: 0;
background: transparent;
box-shadow: none;
}
&:before {
display: block;
content: "";
position: absolute;
top: -11px;
left: calc(50% - 10px);
width: 0;
border-style: solid;
border-width: 0 10px 10px;
border-color: $border-color transparent;
z-index: 0;
@include breakpoint($large) {
display: none;
}
}
&:after {
display: block;
content: "";
position: absolute;
top: -10px;
left: calc(50% - 10px);
width: 0;
border-style: solid;
border-width: 0 10px 10px;
border-color: $background-color transparent;
z-index: 1;
@include breakpoint($large) {
display: none;
}
}
li {
white-space: nowrap;
}
a {
display: block;
margin-bottom: 5px;
padding-right: 5px;
padding-top: 2px;
padding-bottom: 2px;
color: inherit;
font-size: $type-size-5;
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
}

View File

@ -0,0 +1,146 @@
/* ==========================================================================
Syntax highlighting
========================================================================== */
div.highlighter-rouge,
figure.highlight {
position: relative;
margin-bottom: 1em;
font-family: $monospace;
font-size: $type-size-6;
line-height: 1.8;
border: 1px solid $border-color;
border-radius: $border-radius;
background-color: $code-background-color;
box-shadow: $box-shadow;
&:before {
position: absolute;
top: 0;
right: 0;
padding: 0.5em;
background-color: $border-color;
content: "\f121";
font-family: "fontawesome" !important;
line-height: 1;
text-transform: none;
speak: none;
}
.highlight {
margin: 0;
padding: 1em;
}
}
figure.highlight {
padding-left: 1em;
padding-right: 1em;
}
.highlight table {
font-size: 1em;
border: 0;
td {
padding: 5px;
border: 0;
/* line numbers*/
&.gutter {
padding-right: 1em;
color: rgba($muted-text-color, 0.5);
}
}
pre {
margin: 0;
}
}
.highlight pre { width: 100%; }
/*
Solarized Light
http://ethanschoonover.com/solarized
SOLARIZED HEX ROLE
--------- -------- ------------------------------------------
base01 #586e75 body text / default code / primary content
base1 #93a1a1 comments / secondary content
base3 #fdf6e3 background
orange #cb4b16 constants
red #dc322f regex, special keywords
blue #22b3eb reserved keywords
cyan #2aa198 strings, numbers
green #859900 operators, other keywords
========================================================================== */
.highlight .c { color: #93a1a1 } /* Comment */
.highlight .err { color: #586e75 } /* Error */
.highlight .g { color: #586e75 } /* Generic */
.highlight .k { color: #859900 } /* Keyword */
.highlight .l { color: #586e75 } /* Literal */
.highlight .n { color: #586e75 } /* Name */
.highlight .o { color: #859900 } /* Operator */
.highlight .x { color: #cb4b16 } /* Other */
.highlight .p { color: #586e75 } /* Punctuation */
.highlight .cm { color: #93a1a1 } /* Comment.Multiline */
.highlight .cp { color: #859900 } /* Comment.Preproc */
.highlight .c1 { color: #93a1a1 } /* Comment.Single */
.highlight .cs { color: #859900 } /* Comment.Special */
.highlight .gd { color: #2aa198 } /* Generic.Deleted */
.highlight .ge { color: #586e75; font-style: italic } /* Generic.Emph */
.highlight .gr { color: #dc322f } /* Generic.Error */
.highlight .gh { color: #cb4b16 } /* Generic.Heading */
.highlight .gi { color: #859900 } /* Generic.Inserted */
.highlight .go { color: #586e75 } /* Generic.Output */
.highlight .gp { color: #586e75 } /* Generic.Prompt */
.highlight .gs { color: #586e75; font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #cb4b16 } /* Generic.Subheading */
.highlight .gt { color: #586e75 } /* Generic.Traceback */
.highlight .kc { color: #cb4b16 } /* Keyword.Constant */
.highlight .kd { color: #22b3eb } /* Keyword.Declaration */
.highlight .kn { color: #859900 } /* Keyword.Namespace */
.highlight .kp { color: #859900 } /* Keyword.Pseudo */
.highlight .kr { color: #22b3eb } /* Keyword.Reserved */
.highlight .kt { color: #dc322f } /* Keyword.Type */
.highlight .ld { color: #586e75 } /* Literal.Date */
.highlight .m { color: #2aa198 } /* Literal.Number */
.highlight .s { color: #2aa198 } /* Literal.String */
.highlight .na { color: #586e75 } /* Name.Attribute */
.highlight .nb { color: #B58900 } /* Name.Builtin */
.highlight .nc { color: #22b3eb } /* Name.Class */
.highlight .no { color: #cb4b16 } /* Name.Constant */
.highlight .nd { color: #22b3eb } /* Name.Decorator */
.highlight .ni { color: #cb4b16 } /* Name.Entity */
.highlight .ne { color: #cb4b16 } /* Name.Exception */
.highlight .nf { color: #22b3eb } /* Name.Function */
.highlight .nl { color: #586e75 } /* Name.Label */
.highlight .nn { color: #586e75 } /* Name.Namespace */
.highlight .nx { color: #586e75 } /* Name.Other */
.highlight .py { color: #586e75 } /* Name.Property */
.highlight .nt { color: #22b3eb } /* Name.Tag */
.highlight .nv { color: #22b3eb } /* Name.Variable */
.highlight .ow { color: #859900 } /* Operator.Word */
.highlight .w { color: #586e75 } /* Text.Whitespace */
.highlight .mf { color: #2aa198 } /* Literal.Number.Float */
.highlight .mh { color: #2aa198 } /* Literal.Number.Hex */
.highlight .mi { color: #2aa198 } /* Literal.Number.Integer */
.highlight .mo { color: #2aa198 } /* Literal.Number.Oct */
.highlight .sb { color: #93a1a1 } /* Literal.String.Backtick */
.highlight .sc { color: #2aa198 } /* Literal.String.Char */
.highlight .sd { color: #586e75 } /* Literal.String.Doc */
.highlight .s2 { color: #2aa198 } /* Literal.String.Double */
.highlight .se { color: #cb4b16 } /* Literal.String.Escape */
.highlight .sh { color: #586e75 } /* Literal.String.Heredoc */
.highlight .si { color: #2aa198 } /* Literal.String.Interpol */
.highlight .sx { color: #2aa198 } /* Literal.String.Other */
.highlight .sr { color: #dc322f } /* Literal.String.Regex */
.highlight .s1 { color: #2aa198 } /* Literal.String.Single */
.highlight .ss { color: #2aa198 } /* Literal.String.Symbol */
.highlight .bp { color: #22b3eb } /* Name.Builtin.Pseudo */
.highlight .vc { color: #22b3eb } /* Name.Variable.Class */
.highlight .vg { color: #22b3eb } /* Name.Variable.Global */
.highlight .vi { color: #22b3eb } /* Name.Variable.Instance */
.highlight .il { color: #2aa198 } /* Literal.Number.Integer.Long */

View File

@ -0,0 +1,39 @@
/* ==========================================================================
TABLES
========================================================================== */
table {
margin-bottom: 1em;
width: 100%;
font-family: $global-font-family;
font-size: $type-size-6;
border-collapse: collapse;
border: 1px solid $light-gray;
& + table {
margin-top: 1em;
}
}
thead {
background-color: mix($background-color, $dark-gray, 45%);;
border-bottom: 1px solid $light-gray;
color: $primary-color;
}
th {
padding: 0.5em;
font-weight: bold;
text-align: left;
border-right: 1px solid $light-gray;
}
td {
padding: 0.5em;
border-bottom: 1px solid $light-gray;
border-right: 1px solid $light-gray;
}
tr, td, th {
vertical-align: middle;
}

View File

@ -0,0 +1,592 @@
/* ==========================================================================
UTILITY CLASSES
========================================================================== */
/*
Visibility
========================================================================== */
/* http://www.456bereastreet.com/archive/200711/screen_readers_sometimes_ignore_displaynone/ */
.hidden {
display: none;
visibility: hidden;
}
/* for preloading images */
.load {
display: none;
}
.transparent {
opacity: 0;
}
/* https://developer.yahoo.com/blogs/ydn/clip-hidden-content-better-accessibility-53456.html */
.visually-hidden,
.screen-reader-text,
.screen-reader-text span,
.screen-reader-shortcut {
position: absolute !important;
clip: rect(1px, 1px, 1px, 1px);
height: 1px !important;
width: 1px !important;
border: 0 !important;
overflow: hidden;
}
body:hover .visually-hidden a,
body:hover .visually-hidden input,
body:hover .visually-hidden button {
display: none !important;
}
/* screen readers */
.screen-reader-text:focus,
.screen-reader-shortcut:focus {
clip: auto !important;
height: auto !important;
width: auto !important;
display: block;
font-size: 1em;
font-weight: bold;
padding: 15px 23px 14px;
background: #fff;
z-index: 100000;
text-decoration: none;
box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6);
}
/*
Skip links
========================================================================== */
.skip-link {
position: fixed;
z-index: 20;
margin: 0;
font-family: $sans-serif;
white-space: nowrap;
}
.skip-link li {
height: 0;
width: 0;
list-style: none;
}
/*
Type
========================================================================== */
.text-left {
text-align: left;
}
.text-center {
text-align: center;
}
.text-right {
text-align: right;
}
.text-justify {
text-align: justify;
}
.text-nowrap {
white-space: nowrap;
}
/*
Alignment
========================================================================== */
/* clearfix */
.cf { clear: both; }
.wrapper {
margin-left: auto;
margin-right: auto;
width: 100%;
}
/*
Images
========================================================================== */
/* image align left */
.align-left {
display: block;
margin-left: auto;
margin-right: auto;
@include breakpoint($small) {
float: left;
margin-right: 1em;
}
}
/* image align right */
.align-right {
display: block;
margin-left: auto;
margin-right: auto;
@include breakpoint($small) {
float: right;
margin-left: 1em;
}
}
/* image align center */
.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
/* file page content container */
.full {
@include breakpoint($large){
margin-right: -1 * span(2.5 of 12) !important;
}
}
/*
Icons
========================================================================== */
.icon {
display: inline-block;
fill: currentColor;
width: 1em;
height: 1.1em;
line-height: 1;
position: relative;
top: -0.1em;
vertical-align: middle;
}
/* social icons*/
.social-icons {
.fa {
color: $text-color;
}
.fa-behance,
.fa-behance-square {
color: $behance-color;
}
.fa-bitbucket,
.fa-bitbucket-square {
color: $bitbucket-color;
}
.fa-dribbble {
color: $dribbble-color;
}
.fa-facebook,
.fa-facebook-square {
color: $facebook-color;
}
.fa-flickr {
color: $flickr-color;
}
.fa-foursquare {
color: $foursquare-color;
}
.fa-github,
.fa-github-alt,
.fa-github-square {
color: $github-color;
}
.fa-google-plus,
.fa-google-plus-square {
color: $google-plus-color;
}
.fa-instagram {
color: $instagram-color;
}
.fa-lastfm,
.fa-lastfm-square {
color: $lastfm-color;
}
.fa-linkedin,
.fa-linkedin-square {
color: $linkedin-color;
}
.fa-pinterest,
.fa-pinterest-p,
.fa-pinterest-square {
color: $pinterest-color;
}
.fa-rss,
.fa-rss-square {
color: $rss-color;
}
.fa-soundcloud {
color: $soundcloud-color;
}
.fa-stack-exchange,
.fa-stack-overflow {
color: $stackoverflow-color;
}
.fa-tumblr,
.fa-tumblr-square {
color: $tumblr-color;
}
.fa-twitter,
.fa-twitter-square {
color: $twitter-color;
}
.fa-vimeo,
.fa-vimeo-square {
color: $vimeo-color;
}
.fa-vine {
color: $vine-color;
}
.fa-youtube,
.fa-youtube-square,
.fa-youtube-play {
color: $youtube-color;
}
.fa-xing,
.fa-xing-square {
color: $xing-color;
}
}
/*
Navicons
========================================================================== */
.navicon {
position: relative;
width: $navicon-width;
height: $navicon-height;
top: ($navicon-height / 2);
background: $text-color;
margin: auto;
&:before,
&:after {
content: "";
position: absolute;
left: 0;
width: $navicon-width;
height: $navicon-height;
background: $text-color;
}
&:before {
top: (-2 * $navicon-height);
}
&:after {
bottom: (-2 * $navicon-height);
}
}
.close .navicon {
background: transparent;
/* overlay the lines by setting both their top values to 0*/
&:before, &:after{
-webkit-transform-origin: 50% 50%;
-ms-transform-origin: 50% 50%;
transform-origin: 50% 50%;
top: 0;
width: $navicon-width;
}
/* rotate the lines to form the x shape*/
&:before{
-webkit-transform: rotate3d(0,0,1,45deg);
transform: rotate3d(0,0,1,45deg);
}
&:after{
-webkit-transform: rotate3d(0,0,1,-45deg);
transform: rotate3d(0,0,1,-45deg);
}
}
/*
Langicons
========================================================================== */
.langicon {
position: relative;
width: $navicon-width;
display: inline-block;
background: transparent;
margin: auto;
color: $text-color;
&:before,
&:after {
content: "";
position: absolute;
left: 0;
width: $navicon-width;
height: $navicon-height;
background: $text-color;
display: none;
}
&:before {
top: (-2 * $navicon-height);
}
&:after {
bottom: (-2 * $navicon-height);
}
}
.close .langicon {
/* hide the middle line*/
background: transparent;
.fa-language {
display: none;
-webkit-transition: 0.3s;
transition: 0.3s;
}
/* overlay the lines by setting both their top values to 0*/
&:before, &:after{
-webkit-transform-origin: 50% 50%;
-ms-transform-origin: 50% 50%;
transform-origin: 50% 50%;
width: $navicon-width;
display: inherit;
}
/* rotate the lines to form the x shape*/
&:before{
-webkit-transform: rotate3d(0,0,1,45deg);
transform: rotate3d(0,0,1,45deg);
}
&:after{
top: (-2 * $navicon-height);
-webkit-transform: rotate3d(0,0,1,-45deg);
transform: rotate3d(0,0,1,-45deg);
}
}
/*
Sticky, fixed to top content
========================================================================== */
.sticky {
@include breakpoint($large) {
@include clearfix();
position: -webkit-sticky;
position: sticky;
top: 2em;
> * {
display: block;
}
}
}
/*
Wells
========================================================================== */
.well {
min-height: 20px;
padding: 19px;
margin-bottom: 20px;
background-color: #f5f5f5;
border: 1px solid #e3e3e3;
border-radius: $border-radius;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
}
/*
Modals
========================================================================== */
.show-modal {
overflow: hidden;
position: relative;
&:before {
position: absolute;
content: "";
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 999;
background-color: rgba(255, 255, 255, 0.85);
}
.modal {
display: block;
}
}
.modal {
display: none;
position: fixed;
width: 300px;
top: 50%;
left: 50%;
margin-left: -150px;
margin-top: -150px;
min-height: 0;
z-index: 9999;
background: #fff;
border: 1px solid $border-color;
border-radius: $border-radius;
box-shadow: $box-shadow;
&__title {
margin: 0;
padding: 0.5em 1em;
}
&__supporting-text {
padding: 0 1em 0.5em 1em;
}
&__actions {
padding: 0.5em 1em;
border-top: 1px solid $border-color;
}
}
/*
Footnotes
========================================================================== */
.footnote {
color: mix(#fff, $gray, 25%);
text-decoration: none;
}
.footnotes {
color: mix(#fff, $gray, 25%);
ol, li, p {
margin-bottom: 0;
font-size: $type-size-6;
}
}
a.reversefootnote {
color: $gray;
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
/*
Required
========================================================================== */
.required {
color: $danger-color;
font-weight: bold;
}
/*
Google Custom Search Engine
========================================================================== */
.gsc-control-cse {
table, tr, td {
border: 0; /* remove table borders widget */
}
}
/*
Responsive Video Embed
========================================================================== */
.responsive-video-container {
position: relative;
margin-bottom: 1em;
padding-bottom: 56.25%;
height: 0;
overflow: hidden;
max-width: 100%;
iframe,
object,
embed {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
}
// full screen video fixes
:-webkit-full-screen-ancestor {
.masthead,
.page__footer {
position: static;
}
}
/*
Ads
========================================================================== */
.adsbygoogle {
border-bottom: none;
margin-bottom: 1rem;
}
.adsbygoogle:last-child {
margin-bottom: 0;
}

View File

@ -0,0 +1,137 @@
/* ==========================================================================
Variables
========================================================================== */
/*
Typography
========================================================================== */
$doc-font-size : 16 !default;
/* paragraph indention */
$paragraph-indent : false !default; // true, false (default)
$indent-var : 1.3em !default;
/* system typefaces */
$serif : Georgia, Times, serif !default;
$sans-serif : -apple-system, ".SFNSText-Regular", "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", Arial, sans-serif !default;
$monospace : Monaco, Consolas, "Lucida Console", monospace !default;
/* sans serif typefaces */
$sans-serif-narrow : $sans-serif !default;
$helvetica : Helvetica, "Helvetica Neue", Arial, sans-serif !default;
/* serif typefaces */
$georgia : Georgia, serif !default;
$times : Times, serif !default;
$bodoni : "Bodoni MT", serif !default;
$calisto : "Calisto MT", serif !default;
$garamond : Garamond, serif !default;
$global-font-family : $sans-serif !default;
$header-font-family : $sans-serif !default;
$caption-font-family : $serif !default;
/* type scale */
$type-size-1 : 2.441em !default; // ~39.056px
$type-size-2 : 1.953em !default; // ~31.248px
$type-size-3 : 1.563em !default; // ~25.008px
$type-size-4 : 1.25em !default; // ~20px
$type-size-5 : 1em !default;
$type-size-6 : 0.75em !default; // ~12px
$type-size-7 : 0.6875em !default; // ~11px
$type-size-8 : 0.625em !default; // ~10px
/*
Colors
========================================================================== */
$gray : #7a8288 !default;
$dark-gray : mix(#000, $gray, 40%) !default;
$darker-gray : mix(#000, $gray, 60%) !default;
$light-gray : mix(#fff, $gray, 50%) !default;
$lighter-gray : mix(#fff, $gray, 90%) !default;
$background-color : #fff !default;
$code-background-color : #fafafa !default;
$code-background-color-dark : $light-gray !default;
$text-color : $dark-gray !default;
$muted-text-color : mix(#fff, $text-color, 35%) !default;
$border-color : $lighter-gray !default;
$form-background-color : $lighter-gray !default;
$footer-background-color : $lighter-gray !default;
$primary-color : #88C0D0 !default;
$success-color : #A3BE8C !default;
$warning-color : #D08770 !default;
$danger-color : #BF616A !default;
$info-color : #5E81AC !default;
/* YIQ color contrast */
$yiq-contrasted-dark-default : $dark-gray !default;
$yiq-contrasted-light-default : #fff !default;
$yiq-contrasted-threshold : 175 !default;
$yiq-debug : false !default;
/* brands */
$behance-color : #1769FF !default;
$bitbucket-color : #205081 !default;
$dribbble-color : #ea4c89 !default;
$facebook-color : #3b5998 !default;
$flickr-color : #ff0084 !default;
$foursquare-color : #0072b1 !default;
$github-color : #171516 !default;
$google-plus-color : #dd4b39 !default;
$instagram-color : #517fa4 !default;
$lastfm-color : #d51007 !default;
$linkedin-color : #007bb6 !default;
$pinterest-color : #cb2027 !default;
$rss-color : #fa9b39 !default;
$soundcloud-color : #ff3300 !default;
$stackoverflow-color : #fe7a15 !default;
$tumblr-color : #32506d !default;
$twitter-color : #55acee !default;
$vimeo-color : #1ab7ea !default;
$vine-color : #00bf8f !default;
$youtube-color : #bb0000 !default;
$xing-color : #006567 !default;
/* links */
$link-color : mix(#fff, $info-color, 15%) !default;
$link-color-hover : mix(#fff, $link-color, 25%) !default;
$link-color-visited : mix(#000, $link-color, 25%) !default;
$masthead-link-color : $primary-color !default;
$masthead-link-color-hover : mix(#fff, $primary-color, 25%) !default;
$navicon-link-color-hover : mix(#fff, $primary-color, 75%) !default;
/*
Breakpoints
========================================================================== */
$small : 600px !default;
$medium : 768px !default;
$medium-wide : 900px !default;
$large : 1024px !default;
$x-large : 1280px !default;
/*
Grid
========================================================================== */
$right-sidebar-width-narrow : 200px !default;
$right-sidebar-width : 300px !default;
$right-sidebar-width-wide : 400px !default;
/*
Other
========================================================================== */
$border-radius : 4px !default;
$box-shadow : 0 1px 1px rgba(0, 0, 0, 0.125) !default;
$navicon-width : 1.3rem !default;
$navicon-height : 0.22rem !default;
$global-transition : all 0.2s ease-in-out !default;
$intro-transition : intro 0.3s both !default;

Some files were not shown because too many files have changed in this diff Show More