mirror of
https://github.com/clearlinux/clear-linux-documentation.git
synced 2026-05-13 18:33:40 +00:00
Added topic on Clear Containers and updated theme files.
Added topic on Clear Containers and updated theme files.
This commit is contained in:
@@ -23,3 +23,9 @@ TOPIC TITLE
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
|
||||
.. contents::
|
||||
.. sectnum::
|
||||
|
||||
|
||||
<code class="inline">
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Clear Linux documentation build configuration file, created by
|
||||
# Zephyr documentation build configuration file, created by
|
||||
# sphinx-quickstart on Fri May 8 11:43:01 2015.
|
||||
#
|
||||
# This file is execfile()d with the current directory set to its
|
||||
@@ -15,11 +15,6 @@
|
||||
import sys
|
||||
import os
|
||||
import shlex
|
||||
import sphinx_rtd_theme
|
||||
|
||||
# Set this to true if you are working on a local environment and don't want
|
||||
# to retrieve css/js files from the internet
|
||||
local_env = True
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
@@ -54,7 +49,7 @@ master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = u'Clear Linux* Project for Intel® Architecture'
|
||||
copyright = u'2015, many'
|
||||
copyright = u'2015, Intel Corporation, Wind River Systems, Inc.'
|
||||
author = u'many'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
@@ -62,9 +57,9 @@ author = u'many'
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '0.1'
|
||||
version = '0.5'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '0.1'
|
||||
release = '0.5'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
@@ -118,15 +113,16 @@ rst_epilog = """
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
html_theme = 'sphinx_rtd_theme'
|
||||
#html_theme = 'alabaster'
|
||||
html_theme = 'zephyr-docs-theme'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
|
||||
#html_theme_options = {}
|
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
html_theme_path = ['_themes']
|
||||
html_theme_path = ['_themes/']
|
||||
|
||||
# The name for this set of Sphinx documents. If None, it defaults to
|
||||
# "<project> v<release> documentation".
|
||||
@@ -135,10 +131,9 @@ html_title = "Documentation for Clear Linux* Project for Intel(r) Architecture"
|
||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||
#html_short_title = None
|
||||
|
||||
html_logo = 'logo.png'
|
||||
html_theme_options = { 'local_env': local_env, 'logo': 'logo.png' }
|
||||
# The name of an image file (relative to this directory) to place at the top
|
||||
# of the sidebar.
|
||||
#html_logo = None
|
||||
|
||||
# The name of an image file (within the static path) to use as favicon of the
|
||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||
@@ -278,7 +273,7 @@ man_pages = [
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
(master_doc, 'zephyr', u'Documentation for Clear Linux* Project for Intel® Architecture',
|
||||
author, 'Zephyr', 'One line description of project.',
|
||||
author, 'clr', 'One line description of project.',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
296
source/_build--temp folder ignored/conf.py.rodrigo.py
Normal file
296
source/_build--temp folder ignored/conf.py.rodrigo.py
Normal file
@@ -0,0 +1,296 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Zephyr documentation build configuration file, created by
|
||||
# sphinx-quickstart on Fri May 8 11:43:01 2015.
|
||||
#
|
||||
# This file is execfile()d with the current directory set to its
|
||||
# containing dir.
|
||||
#
|
||||
# Note that not all possible configuration values are present in this
|
||||
# autogenerated file.
|
||||
#
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
|
||||
import sys
|
||||
import os
|
||||
import shlex
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
#sys.path.insert(0, os.path.abspath('.'))
|
||||
|
||||
# -- General configuration ------------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
#needs_sphinx = '1.0'
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
# ones.
|
||||
extensions = [
|
||||
'sphinx.ext.autodoc', 'breathe', 'sphinx.ext.todo'
|
||||
]
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# The suffix(es) of source filenames.
|
||||
# You can specify multiple suffix as a list of string:
|
||||
# source_suffix = ['.rst', '.md']
|
||||
source_suffix = '.rst'
|
||||
|
||||
# The encoding of source files.
|
||||
#source_encoding = 'utf-8-sig'
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = u'Zephyr Project'
|
||||
copyright = u'2015, Intel Corporation, Wind River Systems, Inc.'
|
||||
author = u'many'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '0.1'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '0.1'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#
|
||||
# This is also used if you do content translation via gettext catalogs.
|
||||
# Usually you set "language" from the command line for these cases.
|
||||
language = None
|
||||
|
||||
# There are two options for replacing |today|: either, you set today to some
|
||||
# non-false value, then it is used:
|
||||
#today = ''
|
||||
# Else, today_fmt is used as the format for a strftime call.
|
||||
#today_fmt = '%B %d, %Y'
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
exclude_patterns = ['_build']
|
||||
|
||||
# The reST default role (used for this markup: `text`) to use for all
|
||||
# documents.
|
||||
#default_role = None
|
||||
|
||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||
#add_function_parentheses = True
|
||||
|
||||
# If true, the current module name will be prepended to all description
|
||||
# unit titles (such as .. function::).
|
||||
#add_module_names = True
|
||||
|
||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||
# output. They are ignored by default.
|
||||
#show_authors = False
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# A list of ignored prefixes for module index sorting.
|
||||
#modindex_common_prefix = []
|
||||
|
||||
# If true, keep warnings as "system message" paragraphs in the built documents.
|
||||
#keep_warnings = False
|
||||
|
||||
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
||||
todo_include_todos = False
|
||||
|
||||
rst_epilog = """
|
||||
.. include:: /substitutions.rst
|
||||
"""
|
||||
|
||||
# -- Options for HTML output ----------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
#html_theme = 'alabaster'
|
||||
html_theme = 'zephyr-docs-theme'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
#html_theme_options = {}
|
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
html_theme_path = ['../']
|
||||
|
||||
# The name for this set of Sphinx documents. If None, it defaults to
|
||||
# "<project> v<release> documentation".
|
||||
html_title = "Zephyr Project Documentation"
|
||||
|
||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||
#html_short_title = None
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top
|
||||
# of the sidebar.
|
||||
#html_logo = None
|
||||
|
||||
# The name of an image file (within the static path) to use as favicon of the
|
||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||
# pixels large.
|
||||
#html_favicon = None
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_static_path = ['_static']
|
||||
|
||||
# Add any extra paths that contain custom files (such as robots.txt or
|
||||
# .htaccess) here, relative to this directory. These files are copied
|
||||
# directly to the root of the documentation.
|
||||
#html_extra_path = []
|
||||
|
||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||
# using the given strftime format.
|
||||
html_last_updated_fmt = '%b %d, %Y'
|
||||
|
||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||
# typographically correct entities.
|
||||
#html_use_smartypants =
|
||||
|
||||
# Custom sidebar templates, maps document names to template names.
|
||||
#html_sidebars = {}
|
||||
|
||||
# Additional templates that should be rendered to pages, maps page names to
|
||||
# template names.
|
||||
#html_additional_pages = {}
|
||||
|
||||
# If false, no module index is generated.
|
||||
html_domain_indices = False
|
||||
|
||||
# If false, no index is generated.
|
||||
html_use_index = True
|
||||
|
||||
# If true, the index is split into individual pages for each letter.
|
||||
html_split_index = True
|
||||
|
||||
# If true, links to the reST sources are added to the pages.
|
||||
#html_show_sourcelink =
|
||||
|
||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
||||
#html_show_sphinx = True
|
||||
|
||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
||||
html_show_copyright = True
|
||||
|
||||
# If true, an OpenSearch description file will be output, and all pages will
|
||||
# contain a <link> tag referring to it. The value of this option must be the
|
||||
# base URL from which the finished HTML is served.
|
||||
#html_use_opensearch = ''
|
||||
|
||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
||||
#html_file_suffix = None
|
||||
|
||||
# Language to be used for generating the HTML full-text search index.
|
||||
# Sphinx supports the following languages:
|
||||
# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
|
||||
# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
|
||||
#html_search_language = 'en'
|
||||
|
||||
# A dictionary with options for the search language support, empty by default.
|
||||
# Now only 'ja' uses this config value
|
||||
#html_search_options = {'type': 'default'}
|
||||
|
||||
# The name of a javascript file (relative to the configuration directory) that
|
||||
# implements a search results scorer. If empty, the default will be used.
|
||||
#html_search_scorer = 'scorer.js'
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'zephyrdoc'
|
||||
|
||||
# -- Options for LaTeX output ---------------------------------------------
|
||||
|
||||
latex_elements = {
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
#'papersize': 'letterpaper',
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#'pointsize': '10pt',
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#'preamble': '',
|
||||
|
||||
# Latex figure (float) alignment
|
||||
#'figure_align': 'htbp',
|
||||
}
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
(master_doc, 'zephyr.tex', u'Zephyr Project Documentation',
|
||||
u'many', 'manual'),
|
||||
]
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of
|
||||
# the title page.
|
||||
#latex_logo = None
|
||||
|
||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||
# not chapters.
|
||||
#latex_use_parts = False
|
||||
|
||||
# If true, show page references after internal links.
|
||||
#latex_show_pagerefs = False
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#latex_show_urls = False
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#latex_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
#latex_domain_indices = True
|
||||
|
||||
|
||||
# -- Options for manual page output ---------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
(master_doc, 'zephyr', u'Zephyr Project Documentation',
|
||||
[author], 1)
|
||||
]
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#man_show_urls = False
|
||||
|
||||
|
||||
# -- Options for Texinfo output -------------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
(master_doc, 'zephyr', u'Zephyr Project Documentation',
|
||||
author, 'Zephyr', 'One line description of project.',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#texinfo_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
#texinfo_domain_indices = True
|
||||
|
||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||
#texinfo_show_urls = 'footnote'
|
||||
|
||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
||||
#texinfo_no_detailmenu = False
|
||||
|
||||
breathe_projects = {
|
||||
"Zephyr": "xml",
|
||||
"doc-examples": "xml"
|
||||
}
|
||||
breathe_default_project = "Zephyr"
|
||||
@@ -0,0 +1,2 @@
|
||||
pandoc -o get.html get.rst
|
||||
pause
|
||||
@@ -0,0 +1,2 @@
|
||||
pandoc -o get.md get.rst
|
||||
pause
|
||||
@@ -1,32 +1,43 @@
|
||||
<p><span>Linux*-based operating systems contain the code of several hundred, if not thousands, of open source projects. To make this manageable, distributions use a concept called "packages" to configure and compile the source code of these projects into binaries, which can then be logically installed.</span></p>
|
||||
<p><span>Many distributions then combine these compiled binaries into so-called packages, resolving dependencies and providing everything needed to install. This is the granularity at which typical distributions deploy their software, enabling system administrators to install and update each package individually or as a set, using tools such as "yum" and "apt-get."</span></p>
|
||||
<h2><span>The Clear way</span></h2>
|
||||
<p><span>The Clear Linux OS for Intel</span><span>(r)</span><span> Architecture does things a bit differently. While we use the concept of packages to manage compiling source code into installable binaries, we do not deploy software through packages as many distributions do. Instead, we provide "bundles" that each contain a set of functionality for the system administrator--functionality that is enabled by composing all the required upstream open source projects into one logical unit: a bundle.</span></p>
|
||||
<p><span>There is another notable difference between package-based distributions and the Clear Linux OS for Intel Architecture. On a package-based OS, a system administrator can update each individual package or piece of software to a newer (or older!) version. In the Clear Linux OS for Intel Architecture, an update translates to an entirely new OS version, containing one or many updates; it is not possible to update a piece of the system while remaining on the same version of Clear Linux.</span></p>
|
||||
<p><span>Why would you want this? This may sound like a huge restriction or limitation at first, but we consider this a great feature. Imagine a cloud environment with many machines. In this case, it is desirable and more advantageous to have a homogeneous set of software.</span></p>
|
||||
<p><span>With traditional distributions, to describe what version of software a server is running, one might need to:</span></p>
|
||||
<h1 id="clear-containers-getting-started-guide">Clear Containers getting started guide</h1>
|
||||
<p>Clear Containers for Docker* Engine is now available on multiple operating systems. This enables executing existing Docker applications in the secure and fast Clear Containers environment.</p>
|
||||
<h2 id="binary-packages">Binary packages</h2>
|
||||
<p>The primary host platform is Clear Linux* Project for Intel® Architecture, version 4000 or better. However, binaries for a range of operating systems are available from:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p><span>List and keep track of the current OS release (generally uninformative about any singular packages or functionality) </span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><span>Keep track of all packages and repositories used, updating those as required to keep up to date</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><span>List and keep track of every package available and installed on the system, none of which are directly tied to the current OS release</span></p>
|
||||
</li>
|
||||
<li><a href="https://software.opensuse.org/download.html?project=home%3Aclearlinux%3Apreview&package=clear-containers-docker">https://software.opensuse.org/download.html?project=home%3Aclearlinux%3Apreview&package=clear-containers-docker</a></li>
|
||||
</ul>
|
||||
<p><span>This is done very well, but given the nearly endless combinations of packages and </span><span>versions</span><span> of packages a server may have, it quickly becomes non-trivial to define what "version" the </span><span>system</span><span> is and what software it is running without explicitly going through each system and inspecting every package.</span></p>
|
||||
<p><span>With the Clear Linux OS for Intel Architecture, we must keep track of:</span></p>
|
||||
<p>Currently experimental builds are available for:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p><span>One single number</span></p>
|
||||
</li>
|
||||
<li>CentOS*, Scientific Linux* 7</li>
|
||||
<li>Fedora* 21, 22</li>
|
||||
<li>openSUSE* 13.1, 13.2, Tumbleweed</li>
|
||||
<li>SUSE* Linux Enterprise 12</li>
|
||||
<li>Debian* 8.0</li>
|
||||
<li>Ubuntu* 15.04</li>
|
||||
</ul>
|
||||
<p>If you have any feedback, please mail it to the <code>dev@lists.clearlinux.org</code> mailing list. Subscription to this list is available at: <a href="https://lists.clearlinux.org/mailman/listinfo/dev" class="uri">https://lists.clearlinux.org/mailman/listinfo/dev</a>.</p>
|
||||
<h2 id="installation-instructions">Installation instructions</h2>
|
||||
<h3 id="using-hosts-other-than-clear-linux-os-for-intel-architecture">Using hosts other than Clear Linux OS for Intel Architecture</h3>
|
||||
<p>If you are <em>not</em> using Clear Linux OS for Intel Architecture, follow the instructions below:</p>
|
||||
<ol>
|
||||
<li>Visit the link below, and select your operating system by clicking the appropriate icon: <a href="https://software.opensuse.org/download.html?project=home%3Aclearlinux%3Apreview&package=clear-containers-docker">https://software.opensuse.org/download.html?project=home%3Aclearlinux%3Apreview&package=clear-containers-docker</a></li>
|
||||
<li>Follow the brief instructions shown.</li>
|
||||
<li><p>Reload your systemd configuration:</p>
|
||||
<pre><code>$ sudo systemctl daemon-reload</code></pre></li>
|
||||
<li><p>Start the Docker service:</p>
|
||||
<pre><code>$ systemctl restart docker</code></pre></li>
|
||||
</ol>
|
||||
<h3 id="using-clear-linux-os-for-intel-architecture-as-host">Using Clear Linux OS for Intel Architecture as Host</h3>
|
||||
<p>If you are running Clear Linux OS for Intel Architecture on your host system, follow the instructions below:</p>
|
||||
<ol>
|
||||
<li><p>Enable the repository by running the following as the <code>root</code> user:</p>
|
||||
<pre><code># clr_bundle_add containers-basic</code></pre></li>
|
||||
<li><p>Reload your systemd configuration:</p>
|
||||
<pre><code>$ sudo systemctl daemon-reload</code></pre></li>
|
||||
<li><p>Start the Docker service:</p>
|
||||
<pre><code>$ systemctl restart docker</code></pre></li>
|
||||
</ol>
|
||||
<h2 id="source-code">Source Code</h2>
|
||||
<p>The experimental source code is based on the Docker version 1.8.1 upstream release and is available at:</p>
|
||||
<ul>
|
||||
<li><a href="https://github.com/clearlinux/docker" class="uri">https://github.com/clearlinux/docker</a></li>
|
||||
</ul>
|
||||
<p><span>That number represents the current OS release, and it is sufficient to describe the versions of all the software on the OS. Each build is composed of a specific set of bundles made from a particular version of packages. This matters on a daily basis to system administrators, who need to determine which of their systems do not have the latest security fixes, or which combinations of software have been tested with which other pieces. Every release of the same number is guaranteed to contain the same versions of software, so there is no ambiguity between two systems running the same Clear Linux OS for Intel Architecture. </span></p>
|
||||
<h2><span>Incredible update speeds</span></h2>
|
||||
<p><span>Software updates with Clear Linux OS for Intel Architecture are also efficient; bundles are only describing a set of files, and the update technology only updates files that actually changed, using so-called binary-delta technology for efficiency. Updating using this method is different from operating systems that use packages as the unit of deployment. In those operating systems, the entire package gets updated when needed, even if only one small file in that package has changed.</span></p>
|
||||
<p><span>It is quite common for a full OS update fixing a security hole to be only 15 kilobytes in total update size. If only several kilobytes need to be changed, it does not make sense to re-download and reinstall an entire package or suite of programs just to incorporate a miniscule (yet important) update. Through binary deltas, the OS is able to update only those bits that changed, yielding very small update content (deltas) that can be applied exceedingly fast. One can then expect a major security patch or core update to take seconds.</span></p>
|
||||
<p><span>We realize that while our definition of bundles makes sense to us, each data center operator may have special needs and ideas. For that reason we are working on completing a "mixer" tool, which would allow users of Clear Linux OS for Intel Architecture to customize and add bundles and their own software while still using the content of the operating system, and its updates, as the base. This way system administrators can focus on the pieces of their OS deployment that are custom to their environment, while continuing to stay on a controlled update stream.</span></p>
|
||||
<p><span>[The software update technology in Clear Linux OS for Intel Architecture was first presented at the Linux Plumbers conference in 2012.]</span></p>
|
||||
<p><span> </span></p>
|
||||
|
||||
@@ -1,102 +1,72 @@
|
||||
Linux\*-based operating systems contain the code of several hundred, if
|
||||
not thousands, of open source projects. To make this manageable,
|
||||
distributions use a concept called "packages" to configure and compile
|
||||
the source code of these projects into binaries, which can then be
|
||||
logically installed.
|
||||
Clear Containers getting started guide
|
||||
======================================
|
||||
|
||||
Many distributions then combine these compiled binaries into so-called
|
||||
packages, resolving dependencies and providing everything needed to
|
||||
install. This is the granularity at which typical distributions deploy
|
||||
their software, enabling system administrators to install and update
|
||||
each package individually or as a set, using tools such as "yum" and
|
||||
"apt-get."
|
||||
Clear Containers for Docker* Engine is now available on multiple
|
||||
operating systems. This enables executing existing Docker applications
|
||||
in the secure and fast Clear Containers environment.
|
||||
|
||||
The Clear way
|
||||
-------------
|
||||
Binary packages
|
||||
---------------
|
||||
|
||||
The Clear Linux OS for Intel(r) Architecture does things a bit
|
||||
differently. While we use the concept of packages to manage compiling
|
||||
source code into installable binaries, we do not deploy software through
|
||||
packages as many distributions do. Instead, we provide "bundles" that
|
||||
each contain a set of functionality for the system
|
||||
administrator--functionality that is enabled by composing all the
|
||||
required upstream open source projects into one logical unit: a bundle.
|
||||
The primary host platform is Clear Linux* Project for Intel® Architecture, version 4000 or better. However, binaries for a range of operating systems are available from:
|
||||
|
||||
There is another notable difference between package-based distributions
|
||||
and the Clear Linux OS for Intel Architecture. On a package-based OS, a
|
||||
system administrator can update each individual package or piece of
|
||||
software to a newer (or older!) version. In the Clear Linux OS for Intel
|
||||
Architecture, an update translates to an entirely new OS version,
|
||||
containing one or many updates; it is not possible to update a piece of
|
||||
the system while remaining on the same version of Clear Linux.
|
||||
- https://software.opensuse.org/download.html?project=home%3Aclearlinux%3Apreview&package=clear-containers-docker
|
||||
|
||||
Why would you want this? This may sound like a huge restriction or
|
||||
limitation at first, but we consider this a great feature. Imagine a
|
||||
cloud environment with many machines. In this case, it is desirable and
|
||||
more advantageous to have a homogeneous set of software.
|
||||
Currently experimental builds are available for:
|
||||
|
||||
With traditional distributions, to describe what version of software a
|
||||
server is running, one might need to:
|
||||
- CentOS*, Scientific Linux* 7
|
||||
- Fedora* 21, 22
|
||||
- openSUSE* 13.1, 13.2, Tumbleweed
|
||||
- SUSE* Linux Enterprise 12
|
||||
- Debian* 8.0
|
||||
- Ubuntu* 15.04
|
||||
|
||||
- List and keep track of the current OS release (generally
|
||||
uninformative about any singular packages or functionality)
|
||||
If you have any feedback, please mail it to the ``dev@lists.clearlinux.org`` mailing list. Subscription to this list is
|
||||
available at: https://lists.clearlinux.org/mailman/listinfo/dev.
|
||||
|
||||
- Keep track of all packages and repositories used, updating those as
|
||||
required to keep up to date
|
||||
Installation instructions
|
||||
-------------------------
|
||||
|
||||
- List and keep track of every package available and installed on the
|
||||
system, none of which are directly tied to the current OS release
|
||||
Using hosts other than Clear Linux OS for Intel Architecture
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This is done very well, but given the nearly endless combinations of
|
||||
packages and versions of packages a server may have, it quickly becomes
|
||||
non-trivial to define what "version" the system is and what software it
|
||||
is running without explicitly going through each system and inspecting
|
||||
every package.
|
||||
If you are *not* using Clear Linux OS for Intel Architecture, follow the instructions below:
|
||||
|
||||
With the Clear Linux OS for Intel Architecture, we must keep track of:
|
||||
#. Visit the link below, and select your operating system by clicking the appropriate icon:
|
||||
https://software.opensuse.org/download.html?project=home%3Aclearlinux%3Apreview&package=clear-containers-docker
|
||||
|
||||
- One single number
|
||||
#. Follow the brief instructions shown.
|
||||
|
||||
That number represents the current OS release, and it is sufficient to
|
||||
describe the versions of all the software on the OS. Each build is
|
||||
composed of a specific set of bundles made from a particular version of
|
||||
packages. This matters on a daily basis to system administrators, who
|
||||
need to determine which of their systems do not have the latest security
|
||||
fixes, or which combinations of software have been tested with which
|
||||
other pieces. Every release of the same number is guaranteed to contain
|
||||
the same versions of software, so there is no ambiguity between two
|
||||
systems running the same Clear Linux OS for Intel Architecture.
|
||||
#. Reload your systemd configuration::
|
||||
|
||||
Incredible update speeds
|
||||
------------------------
|
||||
$ sudo systemctl daemon-reload
|
||||
|
||||
Software updates with Clear Linux OS for Intel Architecture are also
|
||||
efficient; bundles are only describing a set of files, and the update
|
||||
technology only updates files that actually changed, using so-called
|
||||
binary-delta technology for efficiency. Updating using this method is
|
||||
different from operating systems that use packages as the unit of
|
||||
deployment. In those operating systems, the entire package gets updated
|
||||
when needed, even if only one small file in that package has changed.
|
||||
#. Start the Docker service::
|
||||
|
||||
$ systemctl restart docker
|
||||
|
||||
It is quite common for a full OS update fixing a security hole to be
|
||||
only 15 kilobytes in total update size. If only several kilobytes need
|
||||
to be changed, it does not make sense to re-download and reinstall an
|
||||
entire package or suite of programs just to incorporate a miniscule (yet
|
||||
important) update. Through binary deltas, the OS is able to update only
|
||||
those bits that changed, yielding very small update content (deltas)
|
||||
that can be applied exceedingly fast. One can then expect a major
|
||||
security patch or core update to take seconds.
|
||||
Using Clear Linux OS for Intel Architecture as Host
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
We realize that while our definition of bundles makes sense to us, each
|
||||
data center operator may have special needs and ideas. For that reason
|
||||
we are working on completing a "mixer" tool, which would allow users of
|
||||
Clear Linux OS for Intel Architecture to customize and add bundles and
|
||||
their own software while still using the content of the operating
|
||||
system, and its updates, as the base. This way system administrators can
|
||||
focus on the pieces of their OS deployment that are custom to their
|
||||
environment, while continuing to stay on a controlled update stream.
|
||||
If you are running Clear Linux OS for Intel Architecture on your host system, follow the
|
||||
instructions below:
|
||||
|
||||
[The software update technology in Clear Linux OS for Intel Architecture
|
||||
was first presented at the Linux Plumbers conference in 2012.]
|
||||
#. Enable the repository by running the following as the ``root`` user::
|
||||
|
||||
# clr_bundle_add containers-basic
|
||||
|
||||
#. Reload your systemd configuration::
|
||||
|
||||
$ sudo systemctl daemon-reload
|
||||
|
||||
#. Start the Docker service::
|
||||
|
||||
$ systemctl restart docker
|
||||
|
||||
Source Code
|
||||
-----------
|
||||
|
||||
The experimental source code is based on the Docker version 1.8.1 upstream release and is available at:
|
||||
|
||||
- https://github.com/clearlinux/docker
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 16 KiB |
@@ -1,122 +0,0 @@
|
||||
jQuery(document).ready(function($) {
|
||||
$('body').fadeIn();
|
||||
var headerEffect = function(h, p) {
|
||||
p = p -60; // offset caused by header
|
||||
console.log("pos: " + p);
|
||||
var elements = [];
|
||||
elements.push($('img.logo-region-highlighted').position());
|
||||
elements.push($('div.region-homepage').position());
|
||||
elements.push($('footer').position());
|
||||
console.log(elements);
|
||||
if (p <= elements[0].top) {
|
||||
h.removeClass('-hidden -full-header');
|
||||
} else if (p > elements[0].top && p <= elements[1].top ){
|
||||
h.addClass('-hidden');
|
||||
} else if (p > elements[1].top && p <= elements[2].top ) {
|
||||
h.removeClass('-hidden');
|
||||
h.addClass('-full-header');
|
||||
}
|
||||
};
|
||||
var wrapper = $('div#wrapper');
|
||||
var mobileMenu = $('nav#main-menu-mobile');
|
||||
var mobileMenuBars = $('span#nav-bars');
|
||||
var searchButton = $('span#nav-search');
|
||||
var searchContainer = $('div#search-container');
|
||||
var overlayClass = '-overlay';
|
||||
|
||||
if ($('body').hasClass('front')) {
|
||||
var currentPos = $(window).scrollTop();
|
||||
var header = $('header');
|
||||
headerEffect(header, currentPos);
|
||||
|
||||
$(window).scroll(function() {
|
||||
var currentPos = $(window).scrollTop();
|
||||
console.log(currentPos);
|
||||
headerEffect(header, currentPos);
|
||||
});
|
||||
}
|
||||
|
||||
var overlayBehavior = function(action) {
|
||||
cssClass = '-overlay';
|
||||
}
|
||||
var menuMobile = function(action) {
|
||||
|
||||
}
|
||||
|
||||
var resized = false;
|
||||
$(window).resize(function() {
|
||||
console.log($(window).width());
|
||||
if ($(window).width() > 768 && !resized) {
|
||||
console.log('si');
|
||||
resized = true;
|
||||
} else {
|
||||
resized = false;
|
||||
}
|
||||
});
|
||||
|
||||
mobileMenuBars.click(function() {
|
||||
body = $('body');
|
||||
if (mobileMenu.is(':visible')) {
|
||||
mobileMenu.slideUp();
|
||||
body.removeClass('-expanded-mobile-menu');
|
||||
if (!body.hasClass('-expanded-search-box')) {
|
||||
body.removeClass('-expanded-header');
|
||||
wrapper.removeClass(overlayClass);
|
||||
}
|
||||
} else {
|
||||
mobileMenu.slideDown();
|
||||
body.addClass('-expanded-header -expanded-mobile-menu');
|
||||
wrapper.addClass(overlayClass);
|
||||
}
|
||||
});
|
||||
|
||||
// shows and hides the search text box
|
||||
searchButton.click(function() {
|
||||
if (searchContainer.is(':visible')) {
|
||||
searchContainer.slideUp();
|
||||
$('body').removeClass('-expanded-search-box');
|
||||
if (!$('body').hasClass('-expanded-mobile-menu')) {
|
||||
$('body').removeClass('-expanded-header');
|
||||
wrapper.removeClass(overlayClass);
|
||||
}
|
||||
} else {
|
||||
searchContainer.slideDown();
|
||||
$('body').addClass('-expanded-header -expanded-search-box');
|
||||
wrapper.addClass(overlayClass);
|
||||
}
|
||||
});
|
||||
|
||||
var normalHeaderState = function() {
|
||||
body = $('body');
|
||||
if (body.hasClass('-expanded-header')) {
|
||||
if (searchContainer.is(':visible')) {
|
||||
searchContainer.slideUp()
|
||||
body.removeClass('-expanded-search-box');
|
||||
}
|
||||
if (mobileMenu.is(':visible')) {
|
||||
mobileMenu.slideUp();
|
||||
body.removeClass('-expanded-mobile-menu');
|
||||
}
|
||||
wrapper.removeClass(overlayClass);
|
||||
$('body').removeClass('-expanded-header');
|
||||
}
|
||||
}
|
||||
$('html').click(function() {
|
||||
normalHeaderState();
|
||||
});
|
||||
|
||||
$('header').click(function(event){
|
||||
event.stopPropagation();
|
||||
});
|
||||
|
||||
$('span#secondary-menu-button').click(function() {
|
||||
$('div.region-sidebar').slideToggle();
|
||||
$('div.container-sidebar').toggleClass('-expanded-submenu');
|
||||
});
|
||||
|
||||
$(document).on('keyup', function(e) {
|
||||
if (e.keyCode == 27 && wrapper.hasClass('-overlay')) {
|
||||
normalHeaderState();
|
||||
}
|
||||
});
|
||||
});
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"version": 3,
|
||||
"mappings": ";AAyDA,UAAY;EACV,sBAAsB,EAAE,WAAW;;;AAqDrC,SAAS;EARP,KAAK,EAAE,CAAC;;AACR,iCAAS;EAEP,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,EAAE;;AACb,eAAO;EACL,KAAK,EAAE,IAAI;;;AC1Gb,UAkBC;EAjBC,WAAW,ECFJ,WAAW;EDGlB,WAAW,EAHqC,MAAM;EAItD,UAAU,EAJsD,MAAM;EAapE,GAAG,EAAE,sCAAwB;EAC7B,GAAG,EAAE,8PAAyE;;ACZpF,UAAU;EACR,OAAO,EAAE,YAAY;EACrB,WAAW,EAAE,WAAW;EACxB,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,MAAM;EACnB,WAAW,EAAE,CAAC;EACd,eAAe,EAAE,OAAO;;;AAG1B,KAAK;EACH,OAAO,EAAE,YAAY;EACrB,eAAe,EAAE,OAAO;;;AAIxB,MAAG;EACD,OAAO,EAAE,YAAY;;AACvB;mBAAiB;;EAGf,KAAK,EAAE,OAAY;;;AAEvB,MAAM;EACJ,eAAe,EAAE,IAAI;EACrB,WAAW,EAAE,GAAG;EAChB,WAAW,EAAE,MAAM;;AAEjB,aAAG;EACD,KAAK,EAAE,KAAI;;AACb;0BAAiB;;EAGf,cAAc,EAAE,QAAQ;;;AAG9B,eAAe;EACb,OAAO,EAAE,GAAO;;;AAElB,iBAAiB;EACf,OAAO,EAAE,GAAO;;;AAElB,qBAAqB;EACnB,OAAO,EAAE,GAAO;;;AAElB,uBAAuB;EACrB,OAAO,EAAE,GAAO;;;AAElB,mBAAmB;EACjB,OAAO,EAAE,GAAO;;;AAElB,qBAAqB;EACnB,OAAO,EAAE,GAAO;;;AAElB,qBAAqB;EACnB,OAAO,EAAE,GAAO;;;AAElB,uBAAuB;EACrB,OAAO,EAAE,GAAO;;;AAElB,sBAAsB;EACpB,OAAO,EAAE,GAAO;;;AAElB,wBAAwB;EACtB,OAAO,EAAE,GAAO;;;ACnElB,aAAa;EACX,QAAQ,EAAE,KAAK;EACf,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,CAAC;EACP,KAAK,EC6E+B,KAAK;ED5EzC,KAAK,EEoC+B,OAAyB;EFnC7D,UAAU,EAAE,OAAkC;EAC9C,UAAU,EAAE,kBAAiC;EAC7C,WAAW,EE+CyB,2DAAM;EF9C1C,OAAO,EC+E6B,GAAG;;AD9EvC,eAAC;EACC,KAAK,EE+B6B,OAAK;EF9BvC,eAAe,EAAE,IAAI;;AACvB,8BAAgB;EACd,OAAO,EAAE,IAAI;;AACf,kCAAoB;EAClB,OAAO,EAAE,IAAqB;EAC9B,gBAAgB,EAAE,OAAkC;EACpD,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,KAAK;EACjB,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,OAAO;EACf,KAAK,EEX6B,OAAM;EL4F1C,KAAK,EAAE,CAAC;;AACR,mFAAS;EAEP,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,EAAE;;AACb,wCAAO;EACL,KAAK,EAAE,IAAI;;AGrFX,sCAAG;EACD,KAAK,EEgB2B,OAAyB;;AFf3D,2CAAQ;EACN,KAAK,EAAE,IAAI;;AACb,6CAAU;EACR,KAAK,EAAE,IAAI;;AACb,kDAAiB;EACf,gBAAgB,ECQgB,OAAI;EDPpC,KAAK,EEI2B,IAAM;;AFHxC,yDAAwB;EACtB,gBAAgB,EEmBgB,OAAO;EFlBvC,KAAK,ECzB2B,IAAI;;AD0BxC,0CAA8B;EAC5B,OAAO,EAAE,KAAK;;AAChB,iCAAmB;EACjB,SAAS,EAAE,GAAG;EACd,OAAO,EAAE,IAAqB;EAC9B,KAAK,EEP6B,IAAY;EFQ9C,OAAO,EAAE,IAAI;;AACb,oCAAE;EACA,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,CAAC;EACT,MAAM,EAAE,MAAM;EACd,OAAO,EAAE,CAAC;EACV,UAAU,EAAE,iBAA6C;;AAC3D,oCAAE;EACA,OAAO,EAAE,YAAY;EACrB,MAAM,EAAE,CAAC;;AACT,sCAAC;EACC,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,GAAqB;EAC9B,KAAK,EEfyB,OAAyB;;AFgB7D,uBAAW;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,IAAI,EAAE,IAAI;EACV,MAAM,EAAE,IAAI;EACZ,SAAS,ECkByB,KAAK;;ADjBvC,kCAAU;EACR,KAAK,EAAE,IAAI;;AACb,gCAAQ;EACN,KAAK,EAAE,IAAI;;AACb,qDAA+B;EAC7B,UAAU,EAAE,KAAK;;AACjB,8DAAQ;EACN,KAAK,EAAE,IAAI;;AACb,gEAAU;EACR,KAAK,EAAE,IAAI;;AACf,4CAAoB;EAClB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,KAAuB;EAChC,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,MAAM;;;AGhDpB,oCAAsB;EHmDxB,aAAa;IACX,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,IAAI;;EACb,mBAAO;IACL,OAAO,EAAE,KAAK;;;EAClB,GAAG;IACD,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI",
|
||||
"sources": ["../../../bower_components/wyrm/sass/wyrm_core/_mixin.sass","../../../bower_components/bourbon/dist/css3/_font-face.scss","../../../sass/_theme_badge_fa.sass","../../../sass/_theme_badge.sass","../../../bower_components/wyrm/sass/wyrm_core/_wy_variables.sass","../../../sass/_theme_variables.sass","../../../bower_components/neat/app/assets/stylesheets/grid/_media.scss"],
|
||||
"names": [],
|
||||
"file": "badge_only.css"
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
2
source/_themes/zephyr-docs-theme/README.md
Normal file
2
source/_themes/zephyr-docs-theme/README.md
Normal file
@@ -0,0 +1,2 @@
|
||||
This is Zephyr's documentation theme.
|
||||
|
||||
@@ -6,11 +6,12 @@
|
||||
{% set suffix = source_suffix %}
|
||||
{% endif %}
|
||||
|
||||
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||
<ul class="wy-breadcrumbs">
|
||||
<li><a href="{{ pathto(master_doc) }}">Docs</a> »</li>
|
||||
<div role="navigation" aria-label="breadcrumbs navigation" id="breadcrumb">
|
||||
<ul class="wy-breadcrumbs container">
|
||||
<li><a href="/">Home</a> / </li>
|
||||
<li><a href="{{ pathto(master_doc) }}">Docs</a> / </li>
|
||||
{% for doc in parents %}
|
||||
<li><a href="{{ doc.link|e }}">{{ doc.title }}</a> »</li>
|
||||
<li><a href="{{ doc.link|e }}">{{ doc.title }}</a> / </li>
|
||||
{% endfor %}
|
||||
<li>{{ title }}</li>
|
||||
<li class="wy-breadcrumbs-aside">
|
||||
@@ -19,13 +20,8 @@
|
||||
<a href="https://{{ github_host|default("github.com") }}/{{ github_user }}/{{ github_repo }}/blob/{{ github_version }}{{ conf_py_path }}{{ pagename }}{{ suffix }}" class="fa fa-github"> Edit on GitHub</a>
|
||||
{% elif display_bitbucket %}
|
||||
<a href="https://bitbucket.org/{{ bitbucket_user }}/{{ bitbucket_repo }}/src/{{ bitbucket_version}}{{ conf_py_path }}{{ pagename }}{{ suffix }}" class="fa fa-bitbucket"> Edit on Bitbucket</a>
|
||||
{% elif show_source and source_url_prefix %}
|
||||
<a href="{{ source_url_prefix }}{{ pagename }}{{ suffix }}">View page source</a>
|
||||
{% elif show_source and has_source and sourcename %}
|
||||
<a href="{{ pathto('_sources/' + sourcename, true)|e }}" rel="nofollow"> View page source</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</li>
|
||||
</ul>
|
||||
<hr/>
|
||||
</div>
|
||||
@@ -1,15 +1,5 @@
|
||||
<footer>
|
||||
<div class="container">
|
||||
{% if next or prev %}
|
||||
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
|
||||
{% if next %}
|
||||
<a href="{{ next.link|e }}" class="btn btn-neutral float-right" title="{{ next.title|striptags|e }}" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
|
||||
{% endif %}
|
||||
{% if prev %}
|
||||
<a href="{{ prev.link|e }}" class="btn btn-neutral" title="{{ prev.title|striptags|e }}" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div role="contentinfo" class="row">
|
||||
<p>
|
||||
@@ -1,11 +1,7 @@
|
||||
{# TEMPLATE VAR SETTINGS #}
|
||||
{%- if theme_local_env %}
|
||||
{%- set css_files = css_files + ['_static/main.css'] %}
|
||||
{%- set script_files = script_files + ['_static/main.js'] %}
|
||||
{% else %}
|
||||
{%- set css_files = css_files + ['/sites/all/themes/custom/zephyr_theme/css/main.css'] %}
|
||||
{%- set script_files = script_files + ['/sites/all/themes/custom/zephyr_theme/js/main.js'] %}
|
||||
{%- endif %}
|
||||
{%- set css_files = css_files + ['/sites/all/themes/custom/zephyr_theme/css/main.css'] %}
|
||||
{%- set script_files = script_files + ['/sites/all/themes/custom/zephyr_theme/js/main.js'] %}
|
||||
{%- set script_files = script_files + ['/sites/all/themes/custom/zephyr_theme/js/vendor/affix.js'] %}
|
||||
{%- set url_root = pathto('', 1) %}
|
||||
{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}
|
||||
{%- if not embedded and docstitle %}
|
||||
@@ -53,6 +49,7 @@
|
||||
<link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
|
||||
{% endfor %}
|
||||
|
||||
<link rel="stylesheet" href="{{ pathto('_static/css/overrides.css', 1) }}" type="text/css" />
|
||||
{%- block linktags %}
|
||||
{%- if hasdoc('about') %}
|
||||
<link rel="author" title="{{ _('About these documents') }}"
|
||||
@@ -86,7 +83,7 @@
|
||||
|
||||
</head>
|
||||
|
||||
<body class="wy-body-for-nav not-front" role="document">
|
||||
<body class="wy-body-for-nav not-front" role="document" >
|
||||
<div id="wrapper">
|
||||
<header class="region-header">
|
||||
<div class="inner-header-wide-container">
|
||||
@@ -99,7 +96,7 @@
|
||||
<a href="/" title="Home" rel="home" id="logo">
|
||||
{% if logo %}
|
||||
{# Not strictly valid HTML, but it's the only way to display/scale it properly, without weird scripting or heaps of work #}
|
||||
<img src="{{ pathto('_static/' + logo, 1) }}" />
|
||||
<img src="{{ pathto('_static/img/' + logo, 1) }}" />
|
||||
{% endif %}
|
||||
</a>
|
||||
</div>
|
||||
@@ -130,12 +127,15 @@
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="wy-grid-for-nav container" id="main-content">
|
||||
<div class="row">
|
||||
<div class="wy-grid-for-nav" id="main-content">
|
||||
{% include "breadcrumbs.html" %}
|
||||
<div class="container">
|
||||
<div id="content" class="row">
|
||||
|
||||
{# SIDE NAV, TOGGLES ON MOBILE #}
|
||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side col-xs-3" id="sidebar">
|
||||
<div class="wy-side-scroll">
|
||||
|
||||
<div class="wy-side-scroll" data-spy="affix" data-offset-bottom="630" data-offset-top="0">
|
||||
<div class="wy-side-nav-search">
|
||||
{% block sidebartitle %}
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||
<div class="wy-menu wy-menu-vertical"role="navigation" aria-label="main navigation">
|
||||
{% block menu %}
|
||||
{% set toctree = toctree(maxdepth=4, collapse=theme_collapse_navigation, includehidden=True) %}
|
||||
{% if toctree %}
|
||||
@@ -180,19 +180,19 @@
|
||||
{# PAGE CONTENT #}
|
||||
<div class="wy-nav-content">
|
||||
<div class="rst-content">
|
||||
{% include "breadcrumbs.html" %}
|
||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||
<div itemprop="articleBody">
|
||||
{% block body %}{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% include "navigation.html" %}
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{% include "footer.html" %}
|
||||
</div>
|
||||
{% include "versions.html" %}
|
||||
10
source/_themes/zephyr-docs-theme/navigation.html
Normal file
10
source/_themes/zephyr-docs-theme/navigation.html
Normal file
@@ -0,0 +1,10 @@
|
||||
{% if next or prev %}
|
||||
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
|
||||
{% if next %}
|
||||
<a href="{{ next.link|e }}" class="btn btn-neutral float-right" title="{{ next.title|striptags|e }}" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
|
||||
{% endif %}
|
||||
{% if prev %}
|
||||
<a href="{{ prev.link|e }}" class="btn btn-neutral" title="{{ prev.title|striptags|e }}" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
2
source/_themes/zephyr-docs-theme/static/css/.gitignore
vendored
Normal file
2
source/_themes/zephyr-docs-theme/static/css/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
.sass-cache
|
||||
*.map
|
||||
@@ -4199,58 +4199,6 @@ tbody.collapse.in {
|
||||
background-color: #fff;
|
||||
cursor: not-allowed; }
|
||||
|
||||
.label {
|
||||
display: inline;
|
||||
padding: .2em .6em .3em;
|
||||
font-size: 75%;
|
||||
font-weight: bold;
|
||||
line-height: 1;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
vertical-align: baseline;
|
||||
border-radius: .25em; }
|
||||
.label:empty {
|
||||
display: none; }
|
||||
.btn .label {
|
||||
position: relative;
|
||||
top: -1px; }
|
||||
|
||||
a.label:hover, a.label:focus {
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
cursor: pointer; }
|
||||
|
||||
.label-default {
|
||||
background-color: #777777; }
|
||||
.label-default[href]:hover, .label-default[href]:focus {
|
||||
background-color: #5e5e5e; }
|
||||
|
||||
.label-primary {
|
||||
background-color: #337ab7; }
|
||||
.label-primary[href]:hover, .label-primary[href]:focus {
|
||||
background-color: #286090; }
|
||||
|
||||
.label-success {
|
||||
background-color: #5cb85c; }
|
||||
.label-success[href]:hover, .label-success[href]:focus {
|
||||
background-color: #449d44; }
|
||||
|
||||
.label-info {
|
||||
background-color: #5bc0de; }
|
||||
.label-info[href]:hover, .label-info[href]:focus {
|
||||
background-color: #31b0d5; }
|
||||
|
||||
.label-warning {
|
||||
background-color: #f0ad4e; }
|
||||
.label-warning[href]:hover, .label-warning[href]:focus {
|
||||
background-color: #ec971f; }
|
||||
|
||||
.label-danger {
|
||||
background-color: #d9534f; }
|
||||
.label-danger[href]:hover, .label-danger[href]:focus {
|
||||
background-color: #c9302c; }
|
||||
|
||||
.badge {
|
||||
display: inline-block;
|
||||
min-width: 10px;
|
||||
@@ -5834,6 +5782,9 @@ button.close {
|
||||
padding-bottom: 5px;
|
||||
padding-top: 5px; }
|
||||
|
||||
div.region-homepage .container {
|
||||
opacity: 0;
|
||||
transform: scale(0.92); }
|
||||
div.region-homepage .container, div.region-homepage .block, div.region-homepage .view-content {
|
||||
height: 100%;
|
||||
z-index: 1; }
|
||||
@@ -5880,7 +5831,7 @@ div.region-highlighted {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
content: '';
|
||||
top: 40%;
|
||||
top: 55%;
|
||||
left: -35%; }
|
||||
div.region-highlighted::after {
|
||||
background-image: url("../images/zephyr_clouds.png");
|
||||
@@ -6023,30 +5974,27 @@ div#block-views-events-block-events {
|
||||
background: linear-gradient(-135deg, #DBE1E4 10%, transparent); }
|
||||
|
||||
div#block-views-blogs-block-blog {
|
||||
background: linear-gradient(-45deg, #DBE1E4 10%, transparent); }
|
||||
div#block-views-blogs-block-blog .container h3::after {
|
||||
left: calc(50% - 50px); }
|
||||
position: relative;
|
||||
background: linear-gradient(-135deg, #DBE1E4 10%, transparent); }
|
||||
div#block-views-blogs-block-blog::before {
|
||||
background-image: url("../images/zephyr_clouds.png");
|
||||
background-size: contain;
|
||||
content: ' ';
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
background-repeat: no-repeat;
|
||||
transform: rotate(180deg);
|
||||
transform: scale(-1, 1);
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
content: '';
|
||||
top: 95%;
|
||||
left: 10%; }
|
||||
z-index: -1;
|
||||
background: url("../images/zephyr_clouds_bottom.png") no-repeat right bottom content-box;
|
||||
background-size: contain; }
|
||||
@media (min-width: 768px) {
|
||||
div#block-views-blogs-block-blog::before {
|
||||
top: 90%; } }
|
||||
background-size: 75%; } }
|
||||
@media (min-width: 992px) {
|
||||
div#block-views-blogs-block-blog::before {
|
||||
top: 90%; } }
|
||||
@media (min-width: 1200px) {
|
||||
div#block-views-blogs-block-blog::before {
|
||||
top: 90%; } }
|
||||
background-position: right bottom -5%;
|
||||
background-size: initial; } }
|
||||
div#block-views-blogs-block-blog .container h3::after {
|
||||
left: calc(50% - 50px); }
|
||||
|
||||
html {
|
||||
overflow: initial; }
|
||||
@@ -6055,6 +6003,11 @@ body.wy-body-for-nav {
|
||||
background: initial; }
|
||||
body.wy-body-for-nav #main-content {
|
||||
padding-bottom: 641px; }
|
||||
body.wy-body-for-nav div#main-content {
|
||||
background: initial !important; }
|
||||
body.wy-body-for-nav div#content {
|
||||
padding-top: 35px;
|
||||
padding-bottom: 0 !important; }
|
||||
|
||||
.wy-nav-top {
|
||||
display: none; }
|
||||
@@ -6062,41 +6015,128 @@ body.wy-body-for-nav {
|
||||
.wy-side-scroll, .wy-side-nav-search, .wy-menu-vertical {
|
||||
width: initial;
|
||||
overflow-x: initial;
|
||||
overflow-y: initial; }
|
||||
overflow-y: initial;
|
||||
height: initial; }
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.wy-side-scroll {
|
||||
width: 157.5px; } }
|
||||
@media (min-width: 992px) {
|
||||
.wy-side-scroll {
|
||||
width: 212.5px; } }
|
||||
@media (min-width: 1200px) {
|
||||
.wy-side-scroll {
|
||||
width: 262.5px; } }
|
||||
|
||||
.sidebar-top, .sidebar-bottom {
|
||||
position: absolute; }
|
||||
|
||||
.sidebar-fixed {
|
||||
position: fixed; }
|
||||
|
||||
.wy-nav-side {
|
||||
bottom: initial;
|
||||
padding-bottom: initial;
|
||||
overflow-x: initial;
|
||||
overflow-y: initial;
|
||||
background: initial;
|
||||
z-index: initial;
|
||||
left: initial !important; }
|
||||
left: initial !important;
|
||||
bottom: initial;
|
||||
top: initial; }
|
||||
|
||||
.wy-side-nav-search input[type=text] {
|
||||
border-color: initial; }
|
||||
|
||||
.wy-nav-content-wrap {
|
||||
margin-left: initial;
|
||||
background: initial; }
|
||||
|
||||
.wy-side-nav-search {
|
||||
padding: initial;
|
||||
z-index: initial; }
|
||||
.wy-side-nav-search input[type=text] {
|
||||
border-radius: 0;
|
||||
color: #000;
|
||||
font-size: initial; }
|
||||
|
||||
.wy-nav-content {
|
||||
max-width: initial;
|
||||
padding: initial; }
|
||||
padding: initial;
|
||||
background: initial; }
|
||||
|
||||
.wy-side-nav-search {
|
||||
background-color: transparent;
|
||||
position: initial; }
|
||||
|
||||
.wy-menu-vertical a {
|
||||
padding-right: 0 !important;
|
||||
border-right: none !important; }
|
||||
.wy-menu-vertical a:hover {
|
||||
background-color: transparent; }
|
||||
.wy-menu-vertical li.current, .wy-menu-vertical a.current {
|
||||
background: #F6F7F8; }
|
||||
.wy-menu-vertical li.current {
|
||||
background: #F6F7F8; }
|
||||
.wy-menu-vertical li a {
|
||||
border-left: 3px solid;
|
||||
border-left-color: transparent;
|
||||
font-size: 14px;
|
||||
padding-left: 10px;
|
||||
transition: border-left-color 0.2s ease;
|
||||
color: #000;
|
||||
border-right: none !important;
|
||||
background: none !important;
|
||||
padding-right: 0 !important; }
|
||||
.wy-menu-vertical li a.current {
|
||||
font-weight: initial;
|
||||
background: #FFF;
|
||||
color: inherit; }
|
||||
.wy-menu-vertical li a:hover, .wy-menu-vertical li a.current {
|
||||
transition: border-left-color 0.2s ease;
|
||||
border-left-color: #AF7FE4;
|
||||
color: #7929D2; }
|
||||
.wy-menu-vertical li a:hover {
|
||||
background: none; }
|
||||
|
||||
html {
|
||||
height: 100%; }
|
||||
.wy-grid-for-nav > .row, div#block-views-features-block-features .wy-grid-for-nav > .view-content {
|
||||
position: relative; }
|
||||
|
||||
div#breadcrumb ul {
|
||||
margin-bottom: 0px; }
|
||||
div#breadcrumb a {
|
||||
padding: 0px; }
|
||||
|
||||
body.page-downloads table {
|
||||
width: 100%; }
|
||||
body.page-downloads thead {
|
||||
font-size: 1.2em; }
|
||||
body.page-downloads th {
|
||||
border-bottom: 2px solid #F0F2F4;
|
||||
padding-bottom: 15px; }
|
||||
body.page-downloads td {
|
||||
padding: 15px 0 15px; }
|
||||
|
||||
body.page-admin table {
|
||||
width: 100%;
|
||||
border: 1px solid #F0F2F4; }
|
||||
body.page-admin th {
|
||||
font-size: 1.2em; }
|
||||
body.page-admin td, body.page-admin th {
|
||||
padding: 5px; }
|
||||
body.page-admin td.active, body.page-admin th.active {
|
||||
background-color: #F0F2F4; }
|
||||
body.page-admin tbody tr {
|
||||
transition: background-color 0.2s ease; }
|
||||
body.page-admin tbody tr.even {
|
||||
background-color: #F6F7F8; }
|
||||
body.page-admin tbody tr.odd {
|
||||
background-color: #FFF; }
|
||||
body.page-admin tbody tr:hover {
|
||||
background-color: #F0F2F4;
|
||||
transition: background-color 0.2s ease; }
|
||||
|
||||
html, body {
|
||||
min-height: 100%; }
|
||||
|
||||
body {
|
||||
font-family: "IntelClear-Light", "ClearSans-Light", Helvetica, "Helvetica Neue", verdana, sans-serif;
|
||||
font-size: 14px;
|
||||
height: 100%;
|
||||
line-height: 1.4; }
|
||||
|
||||
h1, .h1,
|
||||
@@ -6115,7 +6155,8 @@ h1, .h1 {
|
||||
margin-bottom: 30px; }
|
||||
|
||||
h2, .h2 {
|
||||
font-size: 30px; }
|
||||
font-size: 30px;
|
||||
margin-bottom: 15px; }
|
||||
|
||||
h3, .h3 {
|
||||
font-size: 20px;
|
||||
@@ -6197,6 +6238,22 @@ a:active {
|
||||
visibility: visible;
|
||||
opacity: 1; }
|
||||
|
||||
div.region-homepage .-fade-in {
|
||||
opacity: 1;
|
||||
transform: scale(1);
|
||||
transition: opacity 0.5s, transform 0.65s ease-out; }
|
||||
|
||||
.-monospace-text {
|
||||
font-family: Consolas, monaco, monospace; }
|
||||
|
||||
.-lightgray-bg {
|
||||
background-color: #F0F2F4;
|
||||
padding: 3px; }
|
||||
|
||||
.-lightgray-l-bg {
|
||||
background-color: #F6F7F8;
|
||||
padding: 3px; }
|
||||
|
||||
.-collapsed-header, body.front header {
|
||||
transition: all 0.3s ease-in; }
|
||||
@media (min-width: 768px) {
|
||||
@@ -6213,23 +6270,31 @@ a:active {
|
||||
border-bottom: 1px solid #d1d3d5;
|
||||
transition: border-bottom 0.2s; }
|
||||
|
||||
.-hidden, .-hidden-full-header {
|
||||
transition: transform 0.01s ease-in-out; }
|
||||
|
||||
.-hidden {
|
||||
opacity: 0;
|
||||
transition: all 0.2s; }
|
||||
transform: translateY(-100%); }
|
||||
|
||||
.-hidden-full-header {
|
||||
transform: translateY(-100%); }
|
||||
|
||||
.-expanded-mobile-menu a.navigation-button span::after {
|
||||
font-family: 'FontAwesome';
|
||||
content: "" !important; }
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.-full-header .sub-container, body.not-front header .sub-container {
|
||||
height: 80px !important; }
|
||||
.-full-header nav#main-menu, body.not-front header nav#main-menu {
|
||||
float: right;
|
||||
display: block; }
|
||||
.-full-header .header-logo, body.not-front header .header-logo {
|
||||
display: table-cell !important;
|
||||
text-align: left; } }
|
||||
.-full-header, body.not-front header {
|
||||
margin-top: 0;
|
||||
transition: transform 0.01s ease-in-out; }
|
||||
@media (min-width: 768px) {
|
||||
.-full-header .sub-container, body.not-front header .sub-container {
|
||||
height: 80px !important; }
|
||||
.-full-header nav#main-menu, body.not-front header nav#main-menu {
|
||||
float: right;
|
||||
display: block; }
|
||||
.-full-header .header-logo, body.not-front header .header-logo {
|
||||
display: table-cell !important;
|
||||
text-align: left; } }
|
||||
|
||||
header {
|
||||
width: 100%;
|
||||
@@ -6316,7 +6381,7 @@ header {
|
||||
transition: all 0.1s linear; }
|
||||
header .inner-header-wide-container nav#main-menu ul.navbar-nav li a.contact-us {
|
||||
display: none; }
|
||||
header .inner-header-wide-container nav#main-menu ul.navbar-nav li a.active {
|
||||
header .inner-header-wide-container nav#main-menu ul.navbar-nav li a.active, header .inner-header-wide-container nav#main-menu ul.navbar-nav li a.active-trail {
|
||||
background: #2d3237;
|
||||
height: calc(100% - 5px);
|
||||
color: #d1d3d5; }
|
||||
@@ -6326,8 +6391,7 @@ header {
|
||||
transition: all 0.1s linear;
|
||||
background-color: #4c5155; }
|
||||
header .inner-header-wide-container nav#main-menu ul.navbar-nav li a:active {
|
||||
background-color: #2d3237;
|
||||
transform: scale(0.95); }
|
||||
background-color: #2d3237; }
|
||||
header .inner-header-wide-container nav#main-menu-mobile {
|
||||
display: none; }
|
||||
header .inner-header-wide-container nav#main-menu-mobile ul {
|
||||
@@ -6375,7 +6439,7 @@ footer {
|
||||
footer .region-footer-navigation-container .region-footer-navigation::before {
|
||||
width: 2px;
|
||||
height: 100%;
|
||||
background-color: #919196;
|
||||
background-color: #4c5155;
|
||||
content: '';
|
||||
position: absolute; }
|
||||
footer .region-footer-navigation-container .menu-block-wrapper {
|
||||
@@ -6388,6 +6452,7 @@ footer {
|
||||
width: 100%; }
|
||||
footer .region-footer-navigation-container .menu-block-wrapper ul li {
|
||||
list-style-type: none;
|
||||
list-style-image: none;
|
||||
margin: 0; }
|
||||
footer .region-footer-navigation-container .menu-block-wrapper a.home, footer .region-footer-navigation-container .menu-block-wrapper a.contact-us {
|
||||
display: none; }
|
||||
@@ -6441,17 +6506,20 @@ footer {
|
||||
color: #919196;
|
||||
min-height: 80px;
|
||||
padding: 10px 0;
|
||||
width: 100%;
|
||||
font-size: 0.7em; }
|
||||
@media (min-width: 768px) {
|
||||
footer .region-footer-disclaimer-container {
|
||||
font-size: 0.8em; } }
|
||||
@media (min-width: 992px) {
|
||||
footer .region-footer-disclaimer-container {
|
||||
font-size: 0.9em; } }
|
||||
@media (min-width: 1200px) {
|
||||
footer .region-footer-disclaimer-container {
|
||||
font-size: 0.9em; } }
|
||||
width: 100%; }
|
||||
footer .region-footer-disclaimer-container p {
|
||||
margin-bottom: 0.3em;
|
||||
line-height: initial;
|
||||
font-size: 0.7em; }
|
||||
@media (min-width: 768px) {
|
||||
footer .region-footer-disclaimer-container p {
|
||||
font-size: 0.8em; } }
|
||||
@media (min-width: 992px) {
|
||||
footer .region-footer-disclaimer-container p {
|
||||
font-size: 0.9em; } }
|
||||
@media (min-width: 1200px) {
|
||||
footer .region-footer-disclaimer-container p {
|
||||
font-size: 0.9em; } }
|
||||
|
||||
.-collapsed-offset, body.front div#main-content {
|
||||
padding-top: 60px; }
|
||||
@@ -6461,9 +6529,9 @@ footer {
|
||||
|
||||
div#main-content {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
z-index: 0;
|
||||
padding-bottom: 180px;
|
||||
overflow-x: hidden;
|
||||
padding-top: 80px; }
|
||||
@media (min-width: 768px) {
|
||||
div#main-content {
|
||||
@@ -6472,6 +6540,46 @@ div#main-content {
|
||||
div#main-content {
|
||||
padding-bottom: 500px; } }
|
||||
|
||||
body.not-front div#main-content {
|
||||
min-height: 100vh;
|
||||
background: url("../images/zephyr_clouds_bottom.png") no-repeat right bottom content-box;
|
||||
background-size: contain; }
|
||||
@media (min-width: 768px) {
|
||||
body.not-front div#main-content {
|
||||
background-size: 75%; } }
|
||||
@media (min-width: 992px) {
|
||||
body.not-front div#main-content {
|
||||
background-position: right bottom -5%;
|
||||
background-size: initial; } }
|
||||
body.not-front div#main-content div#content {
|
||||
padding-bottom: 120px; }
|
||||
@media (min-width: 768px) {
|
||||
body.not-front div#main-content div#content {
|
||||
padding-top: 35px;
|
||||
padding-bottom: 90px; } }
|
||||
@media (min-width: 992px) {
|
||||
body.not-front div#main-content div#content {
|
||||
padding-bottom: 135px; } }
|
||||
body.not-front div#main-content div#content div.views-row {
|
||||
margin-bottom: 40px; }
|
||||
body.not-front div#main-content div#content div.views-row p {
|
||||
margin-bottom: 15px; }
|
||||
body.not-front div#main-content div#content div.views-row p:last-child {
|
||||
margin-bottom: 0px; }
|
||||
body.not-front div#main-content div#content div.views-row:last-child {
|
||||
margin-bottom: 0; }
|
||||
body.not-front h1 {
|
||||
margin-bottom: 40px;
|
||||
position: relative; }
|
||||
body.not-front h1::after {
|
||||
width: 100px;
|
||||
height: 6px;
|
||||
background-color: #AF7FE4;
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
bottom: -20px; }
|
||||
|
||||
@font-face {
|
||||
font-family: 'ClearSans-Light';
|
||||
src: url("fonts/ClearSans-Light.eot");
|
||||
@@ -6578,7 +6686,14 @@ div#main-content {
|
||||
font-weight: normal; }
|
||||
.-expanded-submenu {
|
||||
border-bottom-color: #d1d3d5 !important;
|
||||
background-color: #F0F2F4 !important; }
|
||||
background-color: #F0F2F4; }
|
||||
@media (min-width: 768px) {
|
||||
.-expanded-submenu {
|
||||
background-color: #FFF; } }
|
||||
.-expanded-submenu div.region-sidebar {
|
||||
display: block;
|
||||
height: auto;
|
||||
transition: all; }
|
||||
.-expanded-submenu span#secondary-menu-button {
|
||||
display: block; }
|
||||
.-expanded-submenu span#secondary-menu-button::after {
|
||||
@@ -6586,16 +6701,46 @@ div#main-content {
|
||||
content: "" !important;
|
||||
color: #919196; }
|
||||
|
||||
div.region-sidebar {
|
||||
display: none;
|
||||
height: 0px; }
|
||||
@media (min-width: 768px) {
|
||||
div.region-sidebar {
|
||||
display: block; } }
|
||||
|
||||
div.container-sidebar {
|
||||
margin-bottom: 20px;
|
||||
border-bottom: 1px solid #F0F2F4;
|
||||
padding-bottom: 0.5em;
|
||||
background-color: #FFF; }
|
||||
div.container-sidebar div.region-sidebar {
|
||||
display: none; }
|
||||
padding-bottom: 0.5em; }
|
||||
@media (min-width: 768px) {
|
||||
div.container-sidebar {
|
||||
border-bottom: 0; }
|
||||
div.container-sidebar + div.col-sm-9::before {
|
||||
width: 2px;
|
||||
height: 100%;
|
||||
background-color: #F0F2F4;
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 0px; } }
|
||||
div.container-sidebar div.affix {
|
||||
position: initial; }
|
||||
@media (min-width: 768px) {
|
||||
div.container-sidebar div.region-sidebar {
|
||||
display: block; } }
|
||||
div.container-sidebar div.affix {
|
||||
position: fixed; } }
|
||||
div.container-sidebar div.affix-bottom {
|
||||
position: relative; }
|
||||
@media (min-width: 768px) {
|
||||
div.container-sidebar div.affix-bottom {
|
||||
position: absolute; } }
|
||||
@media (min-width: 768px) {
|
||||
div.container-sidebar div.sticky-container {
|
||||
width: 157.5px; } }
|
||||
@media (min-width: 992px) {
|
||||
div.container-sidebar div.sticky-container {
|
||||
width: 131.6px; } }
|
||||
@media (min-width: 1200px) {
|
||||
div.container-sidebar div.sticky-container {
|
||||
width: 165px; } }
|
||||
div.container-sidebar span#secondary-menu-button {
|
||||
cursor: pointer;
|
||||
font-size: 2em;
|
||||
@@ -6609,23 +6754,38 @@ div.container-sidebar {
|
||||
color: #919196; }
|
||||
@media (min-width: 768px) {
|
||||
div.container-sidebar span#secondary-menu-button {
|
||||
display: none; } }
|
||||
cursor: initial;
|
||||
font-size: 1.5em; }
|
||||
div.container-sidebar span#secondary-menu-button::after {
|
||||
content: none !important; } }
|
||||
div.container-sidebar ul {
|
||||
margin: 0;
|
||||
padding: 0; }
|
||||
div.container-sidebar ul li {
|
||||
list-style-type: none;
|
||||
font-size: 1.5em; }
|
||||
margin-bottom: 10px; }
|
||||
@media (min-width: 768px) {
|
||||
div.container-sidebar ul li {
|
||||
font-size: 1em; } }
|
||||
div.container-sidebar ul li a {
|
||||
display: block;
|
||||
border-left: 6px solid transparent;
|
||||
padding-left: 25px;
|
||||
color: #4c5155; }
|
||||
div.container-sidebar ul li a:hover {
|
||||
border-left-color: #7929D2;
|
||||
color: #4c5155;
|
||||
border-left: 3px solid;
|
||||
border-left-color: transparent;
|
||||
font-size: 14px;
|
||||
padding-left: 10px;
|
||||
transition: border-left-color 0.2s ease; }
|
||||
div.container-sidebar ul li a:hover, div.container-sidebar ul li a.active {
|
||||
transition: border-left-color 0.2s ease;
|
||||
border-left-color: #AF7FE4;
|
||||
color: #7929D2; }
|
||||
|
||||
div#breadcrumb {
|
||||
background-color: #F0F2F4;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px; }
|
||||
@media (min-width: 768px) {
|
||||
div#breadcrumb {
|
||||
margin-bottom: 10px; } }
|
||||
|
||||
/*# sourceMappingURL=main.css.map */
|
||||
@@ -0,0 +1 @@
|
||||
// Put all css overrides below
|
||||
|
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 280 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
162
source/_themes/zephyr-docs-theme/static/js/affix.js
Normal file
162
source/_themes/zephyr-docs-theme/static/js/affix.js
Normal file
@@ -0,0 +1,162 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: affix.js v3.3.5
|
||||
* http://getbootstrap.com/javascript/#affix
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
|
||||
+function ($) {
|
||||
'use strict';
|
||||
|
||||
// AFFIX CLASS DEFINITION
|
||||
// ======================
|
||||
|
||||
var Affix = function (element, options) {
|
||||
this.options = $.extend({}, Affix.DEFAULTS, options)
|
||||
|
||||
this.$target = $(this.options.target)
|
||||
.on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
|
||||
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
|
||||
|
||||
this.$element = $(element)
|
||||
this.affixed = null
|
||||
this.unpin = null
|
||||
this.pinnedOffset = null
|
||||
|
||||
this.checkPosition()
|
||||
}
|
||||
|
||||
Affix.VERSION = '3.3.5'
|
||||
|
||||
Affix.RESET = 'affix affix-top affix-bottom'
|
||||
|
||||
Affix.DEFAULTS = {
|
||||
offset: 0,
|
||||
target: window
|
||||
}
|
||||
|
||||
Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
|
||||
var scrollTop = this.$target.scrollTop()
|
||||
var position = this.$element.offset()
|
||||
var targetHeight = this.$target.height()
|
||||
|
||||
if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
|
||||
|
||||
if (this.affixed == 'bottom') {
|
||||
if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
|
||||
return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
|
||||
}
|
||||
|
||||
var initializing = this.affixed == null
|
||||
var colliderTop = initializing ? scrollTop : position.top
|
||||
var colliderHeight = initializing ? targetHeight : height
|
||||
|
||||
if (offsetTop != null && scrollTop <= offsetTop) return 'top'
|
||||
if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
Affix.prototype.getPinnedOffset = function () {
|
||||
if (this.pinnedOffset) return this.pinnedOffset
|
||||
this.$element.removeClass(Affix.RESET).addClass('affix')
|
||||
var scrollTop = this.$target.scrollTop()
|
||||
var position = this.$element.offset()
|
||||
return (this.pinnedOffset = position.top - scrollTop)
|
||||
}
|
||||
|
||||
Affix.prototype.checkPositionWithEventLoop = function () {
|
||||
setTimeout($.proxy(this.checkPosition, this), 1)
|
||||
}
|
||||
|
||||
Affix.prototype.checkPosition = function () {
|
||||
if (!this.$element.is(':visible')) return
|
||||
|
||||
var height = this.$element.height()
|
||||
var offset = this.options.offset
|
||||
var offsetTop = offset.top
|
||||
var offsetBottom = offset.bottom
|
||||
var scrollHeight = Math.max($(document).height(), $(document.body).height())
|
||||
|
||||
if (typeof offset != 'object') offsetBottom = offsetTop = offset
|
||||
if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
|
||||
if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
|
||||
|
||||
var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
|
||||
|
||||
if (this.affixed != affix) {
|
||||
if (this.unpin != null) this.$element.css('top', '')
|
||||
|
||||
var affixType = 'affix' + (affix ? '-' + affix : '')
|
||||
var e = $.Event(affixType + '.bs.affix')
|
||||
|
||||
this.$element.trigger(e)
|
||||
|
||||
if (e.isDefaultPrevented()) return
|
||||
|
||||
this.affixed = affix
|
||||
this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
|
||||
|
||||
this.$element
|
||||
.removeClass(Affix.RESET)
|
||||
.addClass(affixType)
|
||||
.trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
|
||||
}
|
||||
|
||||
if (affix == 'bottom') {
|
||||
this.$element.offset({
|
||||
top: scrollHeight - height - offsetBottom
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// AFFIX PLUGIN DEFINITION
|
||||
// =======================
|
||||
|
||||
function Plugin(option) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
var data = $this.data('bs.affix')
|
||||
var options = typeof option == 'object' && option
|
||||
|
||||
if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
|
||||
if (typeof option == 'string') data[option]()
|
||||
})
|
||||
}
|
||||
|
||||
var old = $.fn.affix
|
||||
|
||||
$.fn.affix = Plugin
|
||||
$.fn.affix.Constructor = Affix
|
||||
|
||||
|
||||
// AFFIX NO CONFLICT
|
||||
// =================
|
||||
|
||||
$.fn.affix.noConflict = function () {
|
||||
$.fn.affix = old
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
// AFFIX DATA-API
|
||||
// ==============
|
||||
|
||||
$(window).on('load', function () {
|
||||
$('[data-spy="affix"]').each(function () {
|
||||
var $spy = $(this)
|
||||
var data = $spy.data()
|
||||
|
||||
data.offset = data.offset || {}
|
||||
|
||||
if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
|
||||
if (data.offsetTop != null) data.offset.top = data.offsetTop
|
||||
|
||||
Plugin.call($spy, data)
|
||||
})
|
||||
})
|
||||
|
||||
}(jQuery);
|
||||
254
source/_themes/zephyr-docs-theme/static/js/main.js
Normal file
254
source/_themes/zephyr-docs-theme/static/js/main.js
Normal file
@@ -0,0 +1,254 @@
|
||||
jQuery(document).ready(function($) {
|
||||
// Global vars
|
||||
// TODO: clean-up this ASAP!
|
||||
var $window = $(window);
|
||||
var wrapper = $('div#wrapper');
|
||||
var mobileMenu = $('nav#main-menu-mobile');
|
||||
var mobileMenuBars = $('span#nav-bars');
|
||||
var searchButton = $('span#nav-search');
|
||||
var searchContainer = $('div#search-container');
|
||||
var overlayClass = '-overlay';
|
||||
var $document = $(document);
|
||||
var $header = $('header');
|
||||
var $footerHeight = $('footer').height();
|
||||
var $body = $('body');
|
||||
var currentPos = $document.scrollTop();
|
||||
|
||||
var calculateWindowSize
|
||||
// returns the latest position in range that is smaller or equal than n
|
||||
var inRange = function(n, range) {
|
||||
var lastCheckpoint = null
|
||||
range.forEach(function(val, idx) {
|
||||
if (n >= val)
|
||||
lastCheckpoint = idx;
|
||||
});
|
||||
return (lastCheckpoint != null) ? lastCheckpoint : false
|
||||
};
|
||||
|
||||
// fades in content as the user scrolls
|
||||
var halfScreenElement= function() {
|
||||
return document.elementFromPoint(0, $window.height()*.66);
|
||||
}
|
||||
|
||||
// This function alternates the different status of the header in body.front
|
||||
var headerEffect = function(header, position) {
|
||||
var $elements = [];
|
||||
var fadeInElements = [];
|
||||
var checkpoints = [];
|
||||
var lastCheckpoint = null;
|
||||
var currentHalfScreenElement = null;
|
||||
$elements.push($('img.logo-region-highlighted'));
|
||||
$('div.region-homepage > div.block').each(function(i) {
|
||||
$elements.push($(this));
|
||||
fadeInElements.push($(this).attr('id'));
|
||||
});
|
||||
$elements.forEach(function(e, idx) {
|
||||
checkpoints.push(e.offset().top);
|
||||
});
|
||||
lastCheckpoint = inRange(position, checkpoints);
|
||||
currentHalfScreenElement = halfScreenElement();
|
||||
if ($.inArray(currentHalfScreenElement.id, fadeInElements) != -1) {
|
||||
$('div#' + currentHalfScreenElement.id + ' div.container').addClass('-fade-in');
|
||||
}
|
||||
|
||||
if (lastCheckpoint !== false) {
|
||||
switch(lastCheckpoint) {
|
||||
case 0:
|
||||
if ($header.hasClass('-full-header')) {
|
||||
$header.addClass('-hidden-full-header');
|
||||
} else {
|
||||
$header.addClass('-hidden');
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
$header.addClass('-full-header');
|
||||
$header.removeClass('-hidden -hidden-full-header');
|
||||
break;
|
||||
default:
|
||||
}
|
||||
} else {
|
||||
$header.removeClass('-hidden -full-header -hidden-full-header');
|
||||
}
|
||||
};
|
||||
|
||||
var sidebarEffect = function (sidebar, position, topOffset, bottomOffset) {
|
||||
bottomOffset = $document.height() - bottomOffset - sidebar.height();
|
||||
console.log(position);
|
||||
if (position <= topOffset) {
|
||||
sidebar.addClass('sidebar-top');
|
||||
sidebar.removeClass('sidebar-fixed sidebar-bottom');
|
||||
sidebar.css('top', '');
|
||||
} else if (position < bottomOffset) {
|
||||
sidebar.removeClass('sidebar-top sidebar-bottom');
|
||||
sidebar.addClass('sidebar-fixed');
|
||||
sidebar.css('top', '');
|
||||
} else {
|
||||
lastPosition = sidebar.offset().top - sidebar.parent().offset().top
|
||||
if (!sidebar.hasClass('sidebar-bottom')) {
|
||||
sidebar.removeClass('sidebar-fixed sidebar-top');
|
||||
sidebar.addClass('sidebar-bottom');
|
||||
sidebar.css('top', lastPosition);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var onReadyExec = function() {
|
||||
if ($body.hasClass('front')) {
|
||||
headerEffect($header, currentPos);
|
||||
}
|
||||
|
||||
};
|
||||
onReadyExec();
|
||||
/*
|
||||
if ($('body').hasClass('wy-body-for-nav')) {
|
||||
$sidebar = $('.wy-side-scroll');
|
||||
currentPos = $window.scrollTop();
|
||||
$(window).scroll(function() {
|
||||
currentPos = $(this).scrollTop();
|
||||
console.log(currentPos);
|
||||
sidebarEffect($sidebar, currentPos, 0, 630);
|
||||
|
||||
})
|
||||
|
||||
}
|
||||
*/
|
||||
//
|
||||
var overlayBehavior = function(action) {
|
||||
cssClass = '-overlay';
|
||||
}
|
||||
var menuMobile = function(action) {
|
||||
|
||||
}
|
||||
|
||||
var resized = false;
|
||||
$window.resize(function() {
|
||||
if ($window.width() > 768 && !resized) {
|
||||
resized = true;
|
||||
} else {
|
||||
resized = false;
|
||||
}
|
||||
});
|
||||
|
||||
mobileMenuBars.click(function() {
|
||||
if (mobileMenu.is(':visible')) {
|
||||
mobileMenu.slideUp(200);
|
||||
$body.removeClass('-expanded-mobile-menu');
|
||||
if (!$body.hasClass('-expanded-search-box')) {
|
||||
$body.removeClass('-expanded-header');
|
||||
wrapper.removeClass(overlayClass);
|
||||
}
|
||||
} else {
|
||||
mobileMenu.slideDown(200);
|
||||
$body.addClass('-expanded-header -expanded-mobile-menu');
|
||||
wrapper.addClass(overlayClass);
|
||||
}
|
||||
});
|
||||
|
||||
// shows and hides the search text box
|
||||
searchButton.click(function() {
|
||||
if (searchContainer.is(':visible')) {
|
||||
searchContainer.slideUp(200);
|
||||
$('body').removeClass('-expanded-search-box');
|
||||
if (!$('body').hasClass('-expanded-mobile-menu')) {
|
||||
$('body').removeClass('-expanded-header');
|
||||
wrapper.removeClass(overlayClass);
|
||||
}
|
||||
} else {
|
||||
searchContainer.slideDown(200);
|
||||
$('body').addClass('-expanded-header -expanded-search-box');
|
||||
wrapper.addClass(overlayClass);
|
||||
}
|
||||
});
|
||||
|
||||
var normalHeaderState = function() {
|
||||
body = $('body');
|
||||
if (body.hasClass('-expanded-header')) {
|
||||
if (searchContainer.is(':visible')) {
|
||||
searchContainer.slideUp()
|
||||
body.removeClass('-expanded-search-box');
|
||||
}
|
||||
if (mobileMenu.is(':visible')) {
|
||||
mobileMenu.slideUp();
|
||||
body.removeClass('-expanded-mobile-menu');
|
||||
}
|
||||
wrapper.removeClass(overlayClass);
|
||||
$('body').removeClass('-expanded-header');
|
||||
}
|
||||
}
|
||||
$('html').click(function() {
|
||||
normalHeaderState();
|
||||
});
|
||||
|
||||
$('header').click(function(event){
|
||||
event.stopPropagation();
|
||||
});
|
||||
|
||||
$('span#secondary-menu-button').click(function() {
|
||||
if ($(window).width() < 768) {
|
||||
$('div.container-sidebar').toggleClass('-expanded-submenu');
|
||||
}
|
||||
});
|
||||
|
||||
// when esc key is keyup
|
||||
$(document).on('keyup', function(e) {
|
||||
if (e.keyCode == 27 && wrapper.hasClass('-overlay')) {
|
||||
normalHeaderState();
|
||||
}
|
||||
});
|
||||
|
||||
// This event listens for a mousedown event on all a.trap-link elements
|
||||
// If the user right-clicks the link, the page will scroll to the anchor
|
||||
// found on attribute data-hash
|
||||
$('a.trap-link').click(function(e) {
|
||||
// only do this where body.page-about
|
||||
if ($('body').hasClass('page-about')) {
|
||||
e.preventDefault();
|
||||
var hash = $(this).data('hash');
|
||||
$(this).closest('ul.menu').find('a.active').removeClass('active');
|
||||
$(this).addClass('active');
|
||||
$('html, body').animate({
|
||||
scrollTop: $('#' + hash).offset().top - 80
|
||||
}, 500);
|
||||
}
|
||||
});
|
||||
|
||||
// Listens for position and updates global variable
|
||||
$window.scroll(function() {
|
||||
currentPos = $(this).scrollTop();
|
||||
console.log(currentPos);
|
||||
if ($body.hasClass('front')) {
|
||||
headerEffect($header, currentPos);
|
||||
}
|
||||
});
|
||||
|
||||
// TODO: Use global currentPos for scroll position
|
||||
if ($('body').hasClass('page-about')) {
|
||||
var $menuLinks = [];
|
||||
var checkpoints = [];
|
||||
var currentPos = 0;
|
||||
var lastCheckpoint = null;
|
||||
$('div.region-sidebar ul.menu a.trap-link').each(function(i) {
|
||||
$menuLinks.push($(this));
|
||||
checkpoints[i] = $('#' + $menuLinks[i].data('hash')).offset().top - 100;
|
||||
});
|
||||
|
||||
$(window).scroll(function() {
|
||||
currentPos = $(this).scrollTop();
|
||||
lastCheckpoint = inRange(currentPos, checkpoints);
|
||||
if (lastCheckpoint !== false) {
|
||||
$menuLinks.forEach(function(e, idx) {
|
||||
if (idx != lastCheckpoint)
|
||||
e.removeClass('active');
|
||||
});
|
||||
$menuLinks[lastCheckpoint].addClass('active');
|
||||
}
|
||||
});
|
||||
}
|
||||
$('div.sticky-container').affix({
|
||||
offset: {
|
||||
top: 0,
|
||||
bottom: 635
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
172
source/_themes/zephyr-docs-theme/static/js/scrollspy.js
Normal file
172
source/_themes/zephyr-docs-theme/static/js/scrollspy.js
Normal file
@@ -0,0 +1,172 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: scrollspy.js v3.3.5
|
||||
* http://getbootstrap.com/javascript/#scrollspy
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
|
||||
+function ($) {
|
||||
'use strict';
|
||||
|
||||
// SCROLLSPY CLASS DEFINITION
|
||||
// ==========================
|
||||
|
||||
function ScrollSpy(element, options) {
|
||||
this.$body = $(document.body)
|
||||
this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
|
||||
this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
|
||||
this.selector = (this.options.target || '') + ' .nav li > a'
|
||||
this.offsets = []
|
||||
this.targets = []
|
||||
this.activeTarget = null
|
||||
this.scrollHeight = 0
|
||||
|
||||
this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
|
||||
this.refresh()
|
||||
this.process()
|
||||
}
|
||||
|
||||
ScrollSpy.VERSION = '3.3.5'
|
||||
|
||||
ScrollSpy.DEFAULTS = {
|
||||
offset: 10
|
||||
}
|
||||
|
||||
ScrollSpy.prototype.getScrollHeight = function () {
|
||||
return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
|
||||
}
|
||||
|
||||
ScrollSpy.prototype.refresh = function () {
|
||||
var that = this
|
||||
var offsetMethod = 'offset'
|
||||
var offsetBase = 0
|
||||
|
||||
this.offsets = []
|
||||
this.targets = []
|
||||
this.scrollHeight = this.getScrollHeight()
|
||||
|
||||
if (!$.isWindow(this.$scrollElement[0])) {
|
||||
offsetMethod = 'position'
|
||||
offsetBase = this.$scrollElement.scrollTop()
|
||||
}
|
||||
|
||||
this.$body
|
||||
.find(this.selector)
|
||||
.map(function () {
|
||||
var $el = $(this)
|
||||
var href = $el.data('target') || $el.attr('href')
|
||||
var $href = /^#./.test(href) && $(href)
|
||||
|
||||
return ($href
|
||||
&& $href.length
|
||||
&& $href.is(':visible')
|
||||
&& [[$href[offsetMethod]().top + offsetBase, href]]) || null
|
||||
})
|
||||
.sort(function (a, b) { return a[0] - b[0] })
|
||||
.each(function () {
|
||||
that.offsets.push(this[0])
|
||||
that.targets.push(this[1])
|
||||
})
|
||||
}
|
||||
|
||||
ScrollSpy.prototype.process = function () {
|
||||
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
|
||||
var scrollHeight = this.getScrollHeight()
|
||||
var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
|
||||
var offsets = this.offsets
|
||||
var targets = this.targets
|
||||
var activeTarget = this.activeTarget
|
||||
var i
|
||||
|
||||
if (this.scrollHeight != scrollHeight) {
|
||||
this.refresh()
|
||||
}
|
||||
|
||||
if (scrollTop >= maxScroll) {
|
||||
return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
|
||||
}
|
||||
|
||||
if (activeTarget && scrollTop < offsets[0]) {
|
||||
this.activeTarget = null
|
||||
return this.clear()
|
||||
}
|
||||
|
||||
for (i = offsets.length; i--;) {
|
||||
activeTarget != targets[i]
|
||||
&& scrollTop >= offsets[i]
|
||||
&& (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
|
||||
&& this.activate(targets[i])
|
||||
}
|
||||
}
|
||||
|
||||
ScrollSpy.prototype.activate = function (target) {
|
||||
this.activeTarget = target
|
||||
|
||||
this.clear()
|
||||
|
||||
var selector = this.selector +
|
||||
'[data-target="' + target + '"],' +
|
||||
this.selector + '[href="' + target + '"]'
|
||||
|
||||
var active = $(selector)
|
||||
.parents('li')
|
||||
.addClass('active')
|
||||
|
||||
if (active.parent('.dropdown-menu').length) {
|
||||
active = active
|
||||
.closest('li.dropdown')
|
||||
.addClass('active')
|
||||
}
|
||||
|
||||
active.trigger('activate.bs.scrollspy')
|
||||
}
|
||||
|
||||
ScrollSpy.prototype.clear = function () {
|
||||
$(this.selector)
|
||||
.parentsUntil(this.options.target, '.active')
|
||||
.removeClass('active')
|
||||
}
|
||||
|
||||
|
||||
// SCROLLSPY PLUGIN DEFINITION
|
||||
// ===========================
|
||||
|
||||
function Plugin(option) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
var data = $this.data('bs.scrollspy')
|
||||
var options = typeof option == 'object' && option
|
||||
|
||||
if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
|
||||
if (typeof option == 'string') data[option]()
|
||||
})
|
||||
}
|
||||
|
||||
var old = $.fn.scrollspy
|
||||
|
||||
$.fn.scrollspy = Plugin
|
||||
$.fn.scrollspy.Constructor = ScrollSpy
|
||||
|
||||
|
||||
// SCROLLSPY NO CONFLICT
|
||||
// =====================
|
||||
|
||||
$.fn.scrollspy.noConflict = function () {
|
||||
$.fn.scrollspy = old
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
// SCROLLSPY DATA-API
|
||||
// ==================
|
||||
|
||||
$(window).on('load.bs.scrollspy.data-api', function () {
|
||||
$('[data-spy="scroll"]').each(function () {
|
||||
var $spy = $(this)
|
||||
Plugin.call($spy, $spy.data())
|
||||
})
|
||||
})
|
||||
|
||||
}(jQuery);
|
||||
@@ -152,7 +152,7 @@ html_static_path = ['_static']
|
||||
# Add any extra paths that contain custom files (such as robots.txt or
|
||||
# .htaccess) here, relative to this directory. These files are copied
|
||||
# directly to the root of the documentation.
|
||||
# html_extra_path = [_html_raw]
|
||||
#html_extra_path = []
|
||||
|
||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||
# using the given strftime format.
|
||||
|
||||
72
source/gs-clear-containers-gettting-started.rst
Normal file
72
source/gs-clear-containers-gettting-started.rst
Normal file
@@ -0,0 +1,72 @@
|
||||
Clear Containers getting started guide
|
||||
======================================
|
||||
|
||||
Clear Containers for Docker* Engine is now available on multiple
|
||||
operating systems. This enables executing existing Docker applications
|
||||
in the secure and fast Clear Containers environment.
|
||||
|
||||
Binary packages
|
||||
---------------
|
||||
|
||||
The primary host platform is Clear Linux* Project for Intel® Architecture, version 4000 or better. However, binaries for a range of operating systems are available from:
|
||||
|
||||
- https://software.opensuse.org/download.html?project=home%3Aclearlinux%3Apreview&package=clear-containers-docker
|
||||
|
||||
Currently experimental builds are available for:
|
||||
|
||||
- CentOS*, Scientific Linux* 7
|
||||
- Fedora* 21, 22
|
||||
- openSUSE* 13.1, 13.2, Tumbleweed
|
||||
- SUSE* Linux Enterprise 12
|
||||
- Debian* 8.0
|
||||
- Ubuntu* 15.04
|
||||
|
||||
If you have any feedback, please mail it to the ``dev@lists.clearlinux.org`` mailing list. Subscription to this list is
|
||||
available at: https://lists.clearlinux.org/mailman/listinfo/dev.
|
||||
|
||||
Installation instructions
|
||||
-------------------------
|
||||
|
||||
Using hosts other than Clear Linux OS for Intel Architecture
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If you are *not* using Clear Linux OS for Intel Architecture, follow the instructions below:
|
||||
|
||||
#. Visit the link below, and select your operating system by clicking the appropriate icon:
|
||||
https://software.opensuse.org/download.html?project=home%3Aclearlinux%3Apreview&package=clear-containers-docker
|
||||
|
||||
#. Follow the brief instructions shown.
|
||||
|
||||
#. Reload your systemd configuration::
|
||||
|
||||
$ sudo systemctl daemon-reload
|
||||
|
||||
#. Start the Docker service::
|
||||
|
||||
$ systemctl restart docker
|
||||
|
||||
Using Clear Linux OS for Intel Architecture as Host
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If you are running Clear Linux OS for Intel Architecture on your host system, follow the
|
||||
instructions below:
|
||||
|
||||
#. Enable the repository by running the following as the ``root`` user::
|
||||
|
||||
# clr_bundle_add containers-basic
|
||||
|
||||
#. Reload your systemd configuration::
|
||||
|
||||
$ sudo systemctl daemon-reload
|
||||
|
||||
#. Start the Docker service::
|
||||
|
||||
$ systemctl restart docker
|
||||
|
||||
Source Code
|
||||
-----------
|
||||
|
||||
The experimental source code is based on the Docker version 1.8.1 upstream release and is available at:
|
||||
|
||||
- https://github.com/clearlinux/docker
|
||||
|
||||
@@ -16,6 +16,7 @@ Getting started
|
||||
gs_creating_bootable_usb
|
||||
gs_installing_clr_as_host
|
||||
gs_running_clr_virtual
|
||||
gs-clear-containers-gettting-started
|
||||
|
||||
Software update
|
||||
###############
|
||||
|
||||
13
source/theme.conf
Normal file
13
source/theme.conf
Normal file
@@ -0,0 +1,13 @@
|
||||
[theme]
|
||||
inherit = basic
|
||||
stylesheet = css/theme.css
|
||||
|
||||
[options]
|
||||
typekit_id = hiw1hhg
|
||||
analytics_id =
|
||||
sticky_navigation = False
|
||||
logo_only =
|
||||
collapse_navigation = False
|
||||
display_version = True
|
||||
local_env =
|
||||
logo = logo.png
|
||||
Reference in New Issue
Block a user