@@ -10,7 +10,7 @@ jobs: | |||
runs-on: self-hosted | |||
timeout-minutes: 2880 | |||
env: | |||
working-directory: ./builder | |||
working-directory: ./ | |||
steps: | |||
- name: Checkout code | |||
uses: actions/checkout@v2 | |||
@@ -8,7 +8,7 @@ jobs: | |||
runs-on: self-hosted | |||
timeout-minutes: 2880 | |||
env: | |||
working-directory: ./builder | |||
working-directory: ./ | |||
steps: | |||
- name: Checkout code | |||
uses: actions/checkout@v2 | |||
@@ -5,3 +5,12 @@ _site | |||
Gemfile.lock | |||
node_modules | |||
.DS_Store | |||
deploy/* | |||
work/* | |||
config | |||
postrun.sh | |||
SKIP | |||
SKIP_IMAGES | |||
.pc | |||
*-pc | |||
apt-cacher-ng/ |
@@ -54,9 +54,9 @@ We currently support the following SDR: | |||
## Getting started | |||
### Download | |||
The download file is hosted on GitHub Releases. Click in the button below to start downloading your latest PiSDR image. No `.xz` extraction is required. Use this file directly with the flashing software. | |||
The download file is hosted on GitHub Releases. Click in the button below to go to the latest release and choose the `.tar.xz` file to start downloading your PiSDR image. No `.xz` extraction is required. Use this file directly with the flashing software. | |||
[Download Latest Image]() | |||
[Download Latest Image](https://github.com/luigifcruz/pisdr-image/releases/latest) | |||
### Installation | |||
The installation process is the same as the vanilla Raspbian. You will need a MicroSD card with at least 8GB of capacity. To transfer the image file to the memory card we recommend the open-source and multi-platform [balenaEtcher](https://www.balena.io/etcher/) or the official [Raspberry Pi Imager](https://www.raspberrypi.org/blog/raspberry-pi-imager-imaging-utility/). | |||
@@ -1,9 +0,0 @@ | |||
deploy/* | |||
work/* | |||
config | |||
postrun.sh | |||
SKIP | |||
SKIP_IMAGES | |||
.pc | |||
*-pc | |||
apt-cacher-ng/ |
@@ -1,13 +0,0 @@ | |||
Copyright (c) 2015 Raspberry Pi (Trading) Ltd. | |||
All rights reserved. | |||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: | |||
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. | |||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. | |||
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
@@ -1,356 +0,0 @@ | |||
# pi-gen | |||
_Tool used to create the raspberrypi.org Raspbian images_ | |||
## Dependencies | |||
pi-gen runs on Debian based operating systems. Currently it is only supported on | |||
either Debian Buster or Ubuntu Xenial and is known to have issues building on | |||
earlier releases of these systems. On other Linux distributions it may be possible | |||
to use the Docker build described below. | |||
To install the required dependencies for pi-gen you should run: | |||
```bash | |||
apt-get install coreutils quilt parted qemu-user-static debootstrap zerofree zip \ | |||
dosfstools bsdtar libcap2-bin grep rsync xz-utils file git curl bc | |||
``` | |||
The file `depends` contains a list of tools needed. The format of this | |||
package is `<tool>[:<debian-package>]`. | |||
## Config | |||
Upon execution, `build.sh` will source the file `config` in the current | |||
working directory. This bash shell fragment is intended to set needed | |||
environment variables. | |||
The following environment variables are supported: | |||
* `IMG_NAME` **required** (Default: unset) | |||
The name of the image to build with the current stage directories. Setting | |||
`IMG_NAME=Raspbian` is logical for an unmodified RPi-Distro/pi-gen build, | |||
but you should use something else for a customized version. Export files | |||
in stages may add suffixes to `IMG_NAME`. | |||
* `RELEASE` (Default: buster) | |||
The release version to build images against. Valid values are jessie, stretch | |||
buster, bullseye, and testing. | |||
* `APT_PROXY` (Default: unset) | |||
If you require the use of an apt proxy, set it here. This proxy setting | |||
will not be included in the image, making it safe to use an `apt-cacher` or | |||
similar package for development. | |||
If you have Docker installed, you can set up a local apt caching proxy to | |||
like speed up subsequent builds like this: | |||
docker-compose up -d | |||
echo 'APT_PROXY=http://172.17.0.1:3142' >> config | |||
* `BASE_DIR` (Default: location of `build.sh`) | |||
**CAUTION**: Currently, changing this value will probably break build.sh | |||
Top-level directory for `pi-gen`. Contains stage directories, build | |||
scripts, and by default both work and deployment directories. | |||
* `WORK_DIR` (Default: `"$BASE_DIR/work"`) | |||
Directory in which `pi-gen` builds the target system. This value can be | |||
changed if you have a suitably large, fast storage location for stages to | |||
be built and cached. Note, `WORK_DIR` stores a complete copy of the target | |||
system for each build stage, amounting to tens of gigabytes in the case of | |||
Raspbian. | |||
**CAUTION**: If your working directory is on an NTFS partition you probably won't be able to build. Make sure this is a proper Linux filesystem. | |||
* `DEPLOY_DIR` (Default: `"$BASE_DIR/deploy"`) | |||
Output directory for target system images and NOOBS bundles. | |||
* `DEPLOY_ZIP` (Default: `1`) | |||
Setting to `0` will deploy the actual image (`.img`) instead of a zipped image (`.zip`). | |||
* `USE_QEMU` (Default: `"0"`) | |||
Setting to '1' enables the QEMU mode - creating an image that can be mounted via QEMU for an emulated | |||
environment. These images include "-qemu" in the image file name. | |||
* `LOCALE_DEFAULT` (Default: "en_GB.UTF-8" ) | |||
Default system locale. | |||
* `TARGET_HOSTNAME` (Default: "raspberrypi" ) | |||
Setting the hostname to the specified value. | |||
* `KEYBOARD_KEYMAP` (Default: "gb" ) | |||
Default keyboard keymap. | |||
To get the current value from a running system, run `debconf-show | |||
keyboard-configuration` and look at the | |||
`keyboard-configuration/xkb-keymap` value. | |||
* `KEYBOARD_LAYOUT` (Default: "English (UK)" ) | |||
Default keyboard layout. | |||
To get the current value from a running system, run `debconf-show | |||
keyboard-configuration` and look at the | |||
`keyboard-configuration/variant` value. | |||
* `TIMEZONE_DEFAULT` (Default: "Europe/London" ) | |||
Default keyboard layout. | |||
To get the current value from a running system, look in | |||
`/etc/timezone`. | |||
* `FIRST_USER_NAME` (Default: "pi" ) | |||
Username for the first user | |||
* `FIRST_USER_PASS` (Default: "raspberry") | |||
Password for the first user | |||
* `WPA_ESSID`, `WPA_PASSWORD` and `WPA_COUNTRY` (Default: unset) | |||
If these are set, they are use to configure `wpa_supplicant.conf`, so that the Raspberry Pi can automatically connect to a wifi network on first boot. If `WPA_ESSID` is set and `WPA_PASSWORD` is unset an unprotected wifi network will be configured. If set, `WPA_PASSWORD` must be between 8 and 63 characters. | |||
* `ENABLE_SSH` (Default: `0`) | |||
Setting to `1` will enable ssh server for remote log in. Note that if you are using a common password such as the defaults there is a high risk of attackers taking over you Raspberry Pi. | |||
* `STAGE_LIST` (Default: `stage*`) | |||
If set, then instead of working through the numeric stages in order, this list will be followed. For example setting to `"stage0 stage1 mystage stage2"` will run the contents of `mystage` before stage2. Note that quotes are needed around the list. An absolute or relative path can be given for stages outside the pi-gen directory. | |||
A simple example for building Raspbian: | |||
```bash | |||
IMG_NAME='Raspbian' | |||
``` | |||
The config file can also be specified on the command line as an argument the `build.sh` or `build-docker.sh` scripts. | |||
``` | |||
./build.sh -c myconfig | |||
``` | |||
This is parsed after `config` so can be used to override values set there. | |||
## How the build process works | |||
The following process is followed to build images: | |||
* Loop through all of the stage directories in alphanumeric order | |||
* Move on to the next directory if this stage directory contains a file called | |||
"SKIP" | |||
* Run the script ```prerun.sh``` which is generally just used to copy the build | |||
directory between stages. | |||
* In each stage directory loop through each subdirectory and then run each of the | |||
install scripts it contains, again in alphanumeric order. These need to be named | |||
with a two digit padded number at the beginning. | |||
There are a number of different files and directories which can be used to | |||
control different parts of the build process: | |||
- **00-run.sh** - A unix shell script. Needs to be made executable for it to run. | |||
- **00-run-chroot.sh** - A unix shell script which will be run in the chroot | |||
of the image build directory. Needs to be made executable for it to run. | |||
- **00-debconf** - Contents of this file are passed to debconf-set-selections | |||
to configure things like locale, etc. | |||
- **00-packages** - A list of packages to install. Can have more than one, space | |||
separated, per line. | |||
- **00-packages-nr** - As 00-packages, except these will be installed using | |||
the ```--no-install-recommends -y``` parameters to apt-get. | |||
- **00-patches** - A directory containing patch files to be applied, using quilt. | |||
If a file named 'EDIT' is present in the directory, the build process will | |||
be interrupted with a bash session, allowing an opportunity to create/revise | |||
the patches. | |||
* If the stage directory contains files called "EXPORT_NOOBS" or "EXPORT_IMAGE" then | |||
add this stage to a list of images to generate | |||
* Generate the images for any stages that have specified them | |||
It is recommended to examine build.sh for finer details. | |||
## Docker Build | |||
Docker can be used to perform the build inside a container. This partially isolates | |||
the build from the host system, and allows using the script on non-debian based | |||
systems (e.g. Fedora Linux). The isolate is not complete due to the need to use | |||
some kernel level services for arm emulation (binfmt) and loop devices (losetup). | |||
To build: | |||
```bash | |||
vi config # Edit your config file. See above. | |||
./build-docker.sh | |||
``` | |||
If everything goes well, your finished image will be in the `deploy/` folder. | |||
You can then remove the build container with `docker rm -v pigen_work` | |||
If something breaks along the line, you can edit the corresponding scripts, and | |||
continue: | |||
```bash | |||
CONTINUE=1 ./build-docker.sh | |||
``` | |||
To examine the container after a failure you can enter a shell within it using: | |||
```bash | |||
sudo docker run -it --privileged --volumes-from=pigen_work pi-gen /bin/bash | |||
``` | |||
After successful build, the build container is by default removed. This may be undesired when making incremental changes to a customized build. To prevent the build script from remove the container add | |||
```bash | |||
PRESERVE_CONTAINER=1 ./build-docker.sh | |||
``` | |||
There is a possibility that even when running from a docker container, the | |||
installation of `qemu-user-static` will silently fail when building the image | |||
because `binfmt-support` _must be enabled on the underlying kernel_. An easy | |||
fix is to ensure `binfmt-support` is installed on the host machine before | |||
starting the `./build-docker.sh` script (or using your own docker build | |||
solution). | |||
## Stage Anatomy | |||
### Raspbian Stage Overview | |||
The build of Raspbian is divided up into several stages for logical clarity | |||
and modularity. This causes some initial complexity, but it simplifies | |||
maintenance and allows for more easy customization. | |||
- **Stage 0** - bootstrap. The primary purpose of this stage is to create a | |||
usable filesystem. This is accomplished largely through the use of | |||
`debootstrap`, which creates a minimal filesystem suitable for use as a | |||
base.tgz on Debian systems. This stage also configures apt settings and | |||
installs `raspberrypi-bootloader` which is missed by debootstrap. The | |||
minimal core is installed but not configured, and the system will not quite | |||
boot yet. | |||
- **Stage 1** - truly minimal system. This stage makes the system bootable by | |||
installing system files like `/etc/fstab`, configures the bootloader, makes | |||
the network operable, and installs packages like raspi-config. At this | |||
stage the system should boot to a local console from which you have the | |||
means to perform basic tasks needed to configure and install the system. | |||
This is as minimal as a system can possibly get, and its arguably not | |||
really usable yet in a traditional sense yet. Still, if you want minimal, | |||
this is minimal and the rest you could reasonably do yourself as sysadmin. | |||
- **Stage 2** - lite system. This stage produces the Raspbian-Lite image. It | |||
installs some optimized memory functions, sets timezone and charmap | |||
defaults, installs fake-hwclock and ntp, wifi and bluetooth support, | |||
dphys-swapfile, and other basics for managing the hardware. It also | |||
creates necessary groups and gives the pi user access to sudo and the | |||
standard console hardware permission groups. | |||
There are a few tools that may not make a whole lot of sense here for | |||
development purposes on a minimal system such as basic Python and Lua | |||
packages as well as the `build-essential` package. They are lumped right | |||
in with more essential packages presently, though they need not be with | |||
pi-gen. These are understandable for Raspbian's target audience, but if | |||
you were looking for something between truly minimal and Raspbian-Lite, | |||
here's where you start trimming. | |||
- **Stage 3** - desktop system. Here's where you get the full desktop system | |||
with X11 and LXDE, web browsers, git for development, Raspbian custom UI | |||
enhancements, etc. This is a base desktop system, with some development | |||
tools installed. | |||
- **Stage 4** - Normal Raspbian image. System meant to fit on a 4GB card. This is the | |||
stage that installs most things that make Raspbian friendly to new | |||
users like system documentation. | |||
- **Stage 5** - The Raspbian Full image. More development | |||
tools, an email client, learning tools like Scratch, specialized packages | |||
like sonic-pi, office productivity, etc. | |||
### Stage specification | |||
If you wish to build up to a specified stage (such as building up to stage 2 | |||
for a lite system), place an empty file named `SKIP` in each of the `./stage` | |||
directories you wish not to include. | |||
Then add an empty file named `SKIP_IMAGES` to `./stage4` and `./stage5` (if building up to stage 2) or | |||
to `./stage2` (if building a minimal system). | |||
```bash | |||
# Example for building a lite system | |||
echo "IMG_NAME='Raspbian'" > config | |||
touch ./stage3/SKIP ./stage4/SKIP ./stage5/SKIP | |||
touch ./stage4/SKIP_IMAGES ./stage5/SKIP_IMAGES | |||
sudo ./build.sh # or ./build-docker.sh | |||
``` | |||
If you wish to build further configurations upon (for example) the lite | |||
system, you can also delete the contents of `./stage3` and `./stage4` and | |||
replace with your own contents in the same format. | |||
## Skipping stages to speed up development | |||
If you're working on a specific stage the recommended development process is as | |||
follows: | |||
* Add a file called SKIP_IMAGES into the directories containing EXPORT_* files | |||
(currently stage2, stage4 and stage5) | |||
* Add SKIP files to the stages you don't want to build. For example, if you're | |||
basing your image on the lite image you would add these to stages 3, 4 and 5. | |||
* Run build.sh to build all stages | |||
* Add SKIP files to the earlier successfully built stages | |||
* Modify the last stage | |||
* Rebuild just the last stage using ```sudo CLEAN=1 ./build.sh``` | |||
* Once you're happy with the image you can remove the SKIP_IMAGES files and | |||
export your image to test | |||
# Troubleshooting | |||
## `64 Bit Systems` | |||
Please note there is currently an issue when compiling with a 64 Bit OS. See https://github.com/RPi-Distro/pi-gen/issues/271 | |||
## `binfmt_misc` | |||
Linux is able execute binaries from other architectures, meaning that it should be | |||
possible to make use of `pi-gen` on an x86_64 system, even though it will be running | |||
ARM binaries. This requires support from the [`binfmt_misc`](https://en.wikipedia.org/wiki/Binfmt_misc) | |||
kernel module. | |||
You may see the following error: | |||
``` | |||
update-binfmts: warning: Couldn't load the binfmt_misc module. | |||
``` | |||
To resolve this, ensure that the following files are available (install them if necessary): | |||
``` | |||
/lib/modules/$(uname -r)/kernel/fs/binfmt_misc.ko | |||
/usr/bin/qemu-arm-static | |||
``` | |||
You may also need to load the module by hand - run `modprobe binfmt_misc`. |
@@ -1,4 +0,0 @@ | |||
IMG_NAME='PiSDR' | |||
ENABLE_SSH=1 | |||
HOSTNAME='pisdr' | |||
FIRST_USER_PASS='raspberry' |
@@ -1,10 +0,0 @@ | |||
{ | |||
"ignoreFiles" : [ | |||
"assets/css/just-the-docs.scss", | |||
"assets/css/dark-mode-preview.scss", | |||
"_sass/vendor/**/*.scss" | |||
], | |||
"extends": [ | |||
"stylelint-config-primer" | |||
] | |||
} |
@@ -1,11 +0,0 @@ | |||
--- | |||
layout: default | |||
title: Page not found | |||
permalink: /404 | |||
nav_exclude: true | |||
search_exclude: true | |||
--- | |||
<h1>Page not found</h1> | |||
<p>The page you requested could not be found. Try using the navigation {% if site.search_enabled %}or search {% endif %}to find what you're looking for or go to this <a href="{{ site.url }}{{ site.baseurl }}">site's home page</a>.</p> |
@@ -1 +0,0 @@ | |||
pisdr.luigi.ltd |
@@ -1,46 +0,0 @@ | |||
# Contributor Covenant Code of Conduct | |||
## Our Pledge | |||
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. | |||
## Our Standards | |||
Examples of behavior that contributes to creating a positive environment include: | |||
* Using welcoming and inclusive language | |||
* Being respectful of differing viewpoints and experiences | |||
* Gracefully accepting constructive criticism | |||
* Focusing on what is best for the community | |||
* Showing empathy towards other community members | |||
Examples of unacceptable behavior by participants include: | |||
* The use of sexualized language or imagery and unwelcome sexual attention or advances | |||
* Trolling, insulting/derogatory comments, and personal or political attacks | |||
* Public or private harassment | |||
* Publishing others' private information, such as a physical or electronic address, without explicit permission | |||
* Other conduct which could reasonably be considered inappropriate in a professional setting | |||
## Our Responsibilities | |||
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. | |||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. | |||
## Scope | |||
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. | |||
## Enforcement | |||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at patrick.marsceill@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. | |||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. | |||
## Attribution | |||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] | |||
[homepage]: http://contributor-covenant.org | |||
[version]: http://contributor-covenant.org/version/1/4/ |
@@ -1,2 +0,0 @@ | |||
source "https://rubygems.org" | |||
gemspec |
@@ -1,21 +0,0 @@ | |||
The MIT License (MIT) | |||
Copyright (c) 2016 Patrick Marsceill | |||
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. |
@@ -1,68 +0,0 @@ | |||
<p align="right"> | |||
<a href="https://badge.fury.io/rb/just-the-docs"><img src="https://badge.fury.io/rb/just-the-docs.svg" alt="Gem version"></a> <a href="https://github.com/pmarsceill/just-the-docs/actions"><img src="https://github.com/pmarsceill/just-the-docs/workflows/CI/badge.svg" alt="Build status"></a> | |||
</p> | |||
<br><br> | |||
<p align="center"> | |||
<h1 align="center">Just the Docs</h1> | |||
<p align="center">A modern, highly customizable, and responsive Jekyll theme for documentation with built-in search.<br>Easily hosted on GitHub Pages with few dependencies.</p> | |||
<p align="center"><strong><a href="https://pmarsceill.github.io/just-the-docs/">See it in action!</a></strong></p> | |||
<br><br><br> | |||
</p> | |||
![jtd](https://user-images.githubusercontent.com/896475/47384541-89053c80-d6d5-11e8-98dc-dba16e192de9.gif) | |||
## Installation | |||
Add this line to your Jekyll site's Gemfile: | |||
```ruby | |||
gem "just-the-docs" | |||
``` | |||
And add this line to your Jekyll site's `_config.yml`: | |||
```yaml | |||
theme: just-the-docs | |||
``` | |||
And then execute: | |||
$ bundle | |||
Or install it yourself as: | |||
$ gem install just-the-docs | |||
## Usage | |||
[View the documentation](https://pmarsceill.github.io/just-the-docs/) for usage information. | |||
## Contributing | |||
Bug reports and pull requests are welcome on GitHub at https://github.com/pmarsceill/just-the-docs. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct. | |||
### Submitting code changes: | |||
- Open a [Pull Request](https://github.com/pmarsceill/just-the-docs/pulls) | |||
- Ensure all CI tests pass | |||
- Await code review | |||
- Bump the version number in `just-the-docs.gemspec` and `package.json` according to [semantic versioning](https://semver.org/). | |||
### Design and development principles of this theme: | |||
1. As few dependencies as possible | |||
2. No build script needed | |||
3. First class mobile experience | |||
4. Make the content shine | |||
## Development | |||
To set up your environment to develop this theme, run `bundle install`. | |||
Your theme is set up just like a normal Jekyll site! To test your theme, run `bundle exec jekyll serve` and open your browser at `http://localhost:4000`. This starts a Jekyll server using your theme. Add pages, documents, data, etc. like normal to test your theme's contents. As you make modifications to your theme and to your content, your site will regenerate and you should see the changes in the browser after a refresh, just like normal. | |||
When the theme is released, only the files in `_layouts`, `_includes`, and `_sass` tracked with Git will be released. | |||
## License | |||
The theme is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT). |
@@ -1 +0,0 @@ | |||
Dir.glob('lib/tasks/*.rake').each {|r| import r} |
@@ -1,61 +0,0 @@ | |||
<<<<<<< HEAD | |||
# Welcome to Jekyll! | |||
# | |||
# This config file is meant for settings that affect your whole site, values | |||
# which you are expected to set up once and rarely edit after that. If you find | |||
# yourself editing these this file very often, consider using Jekyll's data files | |||
# feature for the data you need to update frequently. | |||
# | |||
# For technical reasons, this file is *NOT* reloaded automatically when you use | |||
# 'jekyll serve'. If you change this file, please restart the server process. | |||
# Site settings | |||
# These are used to personalize your new site. If you look in the HTML files, | |||
# you will see them accessed via {{ site.title }}, {{ site.github_repo }}, and so on. | |||
# You can create any custom variable you would like, and they will be accessible | |||
# in the templates via {{ site.myvariable }}. | |||
title: PiSDR Project | |||
description: Official PiSDR Project Download and Documentation Page | |||
baseurl: "/" | |||
url: "https://pisdr.luigifreitas.me" # the base hostname & protocol for your site, e.g. http://example.com | |||
permalink: pretty | |||
exclude: ["node_modules/", "*.gemspec", "*.gem", "Gemfile", "Gemfile.lock", "package.json", "package-lock.json", "script/", "LICENSE.txt", "lib/", "bin/", "README.md", "Rakefile"] | |||
# Set a path/url to a logo that will be displayed instead of the title | |||
#logo: "/assets/images/just-the-docs.png" | |||
# Enable or disable the site search | |||
search_enabled: true | |||
# Set the search token separator for hyphenated-word search: | |||
search_tokenizer_separator: /[\s/]+/ | |||
# Enable or disable heading anchors | |||
heading_anchors: true | |||
# Aux links for the upper right navigation | |||
aux_links: | |||
"PiSDR Project on GitHub": | |||
- "//github.com/luigifreitas/pisdr-image" | |||
# Footer content appears at the bottom of every page's main content | |||
footer_content: "Copyright © 2019-2019 Luigi F. Cruz. Distributed by an <a href=\"https://raw.githubusercontent.com/luigifreitas/pisdr-image/master/LICENSE\">MIT license.</a>" | |||
color_scheme: nil | |||
ga_tracking: UA-126129402-1 | |||
plugins: | |||
- jekyll-seo-tag | |||
compress_html: | |||
clippings: all | |||
comments: all | |||
endings: all | |||
startings: [] | |||
blanklines: false | |||
profile: false | |||
======= | |||
theme: jekyll-theme-cayman | |||
>>>>>>> f429b03be641f7a26cadc6f92b8187dde4b423aa |
@@ -1,40 +0,0 @@ | |||
<head> | |||
<meta charset="UTF-8"> | |||
<meta http-equiv="X-UA-Compatible" content="IE=Edge"> | |||
{% if site.plugins.jekyll-seo == nil %} | |||
<title>{{ page.title }} - {{ site.title }}</title> | |||
{% if page.description %} | |||
<meta name="Description" content="{{ page.description }}"> | |||
{% endif %} | |||
{% endif %} | |||
<link rel="shortcut icon" href="{{ 'favicon.ico' | absolute_url }}" type="image/x-icon"> | |||
<link rel="stylesheet" href="{{ '/assets/css/just-the-docs.css' | absolute_url }}"> | |||
{% if site.ga_tracking != nil %} | |||
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.ga_tracking }}"></script> | |||
<script> | |||
window.dataLayer = window.dataLayer || []; | |||
function gtag(){dataLayer.push(arguments);} | |||
gtag('js', new Date()); | |||
gtag('config', "{{ site.ga_tracking }}"); | |||
</script> | |||
{% endif %} | |||
{% if site.search_enabled != false %} | |||
<script type="text/javascript" src="{{ '/assets/js/vendor/lunr.min.js' | absolute_url }}"></script> | |||
{% endif %} | |||
<script type="text/javascript" src="{{ '/assets/js/just-the-docs.js' | absolute_url }}"></script> | |||
<meta name="viewport" content="width=device-width, initial-scale=1"> | |||
{% seo %} | |||
{% include head_custom.html %} | |||
</head> |
@@ -1,40 +0,0 @@ | |||
<nav role="navigation" aria-label="Main navigation"> | |||
<ul class="navigation-list"> | |||
{%- assign pages_list = site.html_pages | sort:"nav_order" -%} | |||
{%- for node in pages_list -%} | |||
{%- unless node.nav_exclude -%} | |||
{%- if node.parent == nil -%} | |||
<li class="navigation-list-item{% if page.url == node.url or page.parent == node.title or page.grand_parent == node.title %} active{% endif %}"> | |||
{%- if page.parent == node.title or page.grand_parent == node.title -%} | |||
{%- assign first_level_url = node.url | absolute_url -%} | |||
{%- endif -%} | |||
<a href="{{ node.url | absolute_url }}" class="navigation-list-link{% if page.url == node.url %} active{% endif %}">{{ node.title }}</a> | |||
{%- if node.has_children -%} | |||
{%- assign children_list = site.html_pages | where: "parent", node.title | sort:"nav_order" -%} | |||
<ul class="navigation-list-child-list "> | |||
{%- for child in children_list -%} | |||
<li class="navigation-list-item {% if page.url == child.url or page.parent == child.title %} active{% endif %}"> | |||
{%- if page.url == child.url or page.parent == child.title -%} | |||
{%- assign second_level_url = child.url | absolute_url -%} | |||
{%- endif -%} | |||
<a href="{{ child.url | absolute_url }}" class="navigation-list-link{% if page.url == child.url %} active{% endif %}">{{ child.title }}</a> | |||
{%- if child.has_children -%} | |||
{%- assign grand_children_list = site.html_pages | where: "parent", child.title | sort:"nav_order" -%} | |||
<ul class="navigation-list-child-list"> | |||
{%- for grand_child in grand_children_list -%} | |||
<li class="navigation-list-item {% if page.url == grand_child.url %} active{% endif %}"> | |||
<a href="{{ grand_child.url | absolute_url }}" class="navigation-list-link{% if page.url == grand_child.url %} active{% endif %}">{{ grand_child.title }}</a> | |||
</li> | |||
{%- endfor -%} | |||
</ul> | |||
{%- endif -%} | |||
</li> | |||
{%- endfor -%} | |||
</ul> | |||
{%- endif -%} | |||
</li> | |||
{%- endif -%} | |||
{%- endunless -%} | |||
{%- endfor -%} | |||
</ul> | |||
</nav> |
@@ -1,5 +0,0 @@ | |||
{% if site.logo %} | |||
<div class="site-logo"></div> | |||
{% else %} | |||
{{ site.title }} | |||
{% endif %} |
@@ -1,100 +0,0 @@ | |||
{% capture headingsWorkspace %} | |||
{% comment %} | |||
Version 1.0.3 | |||
https://github.com/allejo/jekyll-anchor-headings | |||
"Be the pull request you wish to see in the world." ~Ben Balter | |||
Usage: | |||
{% include anchor_headings.html html=content %} | |||
Parameters: | |||
* html (string) - the HTML of compiled markdown generated by kramdown in Jekyll | |||
Optional Parameters: | |||
* beforeHeading (bool) : false - Set to true if the anchor should be placed _before_ the heading's content | |||
* anchorBody (string) : '' - The content that will be placed inside the anchor; the `%heading%` placeholder is available | |||
* anchorClass (string) : '' - The class(es) that will be used for each anchor. Separate multiple classes with a space | |||
* anchorTitle (string) : '' - The `title` attribute that will be used for anchors | |||
* h_min (int) : 1 - The minimum header level to build an anchor for; any header lower than this value will be ignored | |||
* h_max (int) : 6 - The maximum header level to build an anchor for; any header greater than this value will be ignored | |||
* bodyPrefix (string) : '' - Anything that should be inserted inside of the heading tag _before_ its anchor and content | |||
* bodySuffix (string) : '' - Anything that should be inserted inside of the heading tag _after_ its anchor and content | |||
Output: | |||
The original HTML with the addition of anchors inside of all of the h1-h6 headings. | |||
{% endcomment %} | |||
{% assign minHeader = include.h_min | default: 1 %} | |||
{% assign maxHeader = include.h_max | default: 6 %} | |||
{% assign beforeHeading = include.beforeHeading %} | |||
{% assign nodes = include.html | split: '<h' %} | |||
{% capture edited_headings %}{% endcapture %} | |||
{% for _node in nodes %} | |||
{% capture node %}{{ _node | strip }}{% endcapture %} | |||
{% if node == "" %} | |||
{% continue %} | |||
{% endif %} | |||
{% assign nextChar = node | replace: '"', '' | strip | slice: 0, 1 %} | |||
{% assign headerLevel = nextChar | times: 1 %} | |||
<!-- If the level is cast to 0, it means it's not a h1-h6 tag, so let's try to fix it --> | |||
{% if headerLevel == 0 %} | |||
{% if nextChar != '<' and nextChar != '' %} | |||
{% capture node %}<h{{ node }}{% endcapture %} | |||
{% endif %} | |||
{% capture edited_headings %}{{ edited_headings }}{{ node }}{% endcapture %} | |||
{% continue %} | |||
{% endif %} | |||
{% assign _workspace = node | split: '</h' %} | |||
{% assign _idWorkspace = _workspace[0] | split: 'id="' %} | |||
{% assign _idWorkspace = _idWorkspace[1] | split: '"' %} | |||
{% assign html_id = _idWorkspace[0] %} | |||
{% capture _hAttrToStrip %}{{ _workspace[0] | split: '>' | first }}>{% endcapture %} | |||
{% assign header = _workspace[0] | replace: _hAttrToStrip, '' %} | |||
<!-- Build the anchor to inject for our heading --> | |||
{% capture anchor %}{% endcapture %} | |||
{% if html_id and headerLevel >= minHeader and headerLevel <= maxHeader %} | |||
{% capture anchor %}href="#{{ html_id}}"{% endcapture %} | |||
{% if include.anchorClass %} | |||
{% capture anchor %}{{ anchor }} class="{{ include.anchorClass }}"{% endcapture %} | |||
{% endif %} | |||
{% if include.anchorTitle %} | |||
{% capture anchor %}{{ anchor }} title="{{ include.anchorTitle | replace: '%heading%', header }}"{% endcapture %} | |||
{% endif %} | |||
{% capture anchor %}<a {{ anchor }}>{{ include.anchorBody | replace: '%heading%', header | default: '' }}</a>{% endcapture %} | |||
<!-- In order to prevent adding extra space after a heading, we'll let the 'anchor' value contain it --> | |||
{% if beforeHeading %} | |||
{% capture anchor %}{{ anchor }} {% endcapture %} | |||
{% else %} | |||
{% capture anchor %} {{ anchor }}{% endcapture %} | |||
{% endif %} | |||
{% endif %} | |||
{% capture new_heading %} | |||
<h{{ _hAttrToStrip }} | |||
{{ include.bodyPrefix }} | |||
{% if beforeHeading %} | |||
{{ anchor }}{{ header }} | |||
{% else %} | |||
{{ header }}{{ anchor }} | |||
{% endif %} | |||
{{ include.bodySuffix }} | |||
</h{{ _workspace | last }} | |||
{% endcapture %} | |||
{% capture edited_headings %}{{ edited_headings }}{{ new_heading }}{% endcapture %} | |||
{% endfor %} | |||
{% endcapture %}{% assign headingsWorkspace = '' %}{{ edited_headings | strip }} |
@@ -1,5 +0,0 @@ | |||
--- | |||
layout: default | |||
--- | |||
{{ content }} |
@@ -1,102 +0,0 @@ | |||
--- | |||
layout: table_wrappers | |||
--- | |||
<!DOCTYPE html> | |||
<html lang="{{ site.lang | default: "en-US" }}"> | |||
{% include head.html %} | |||
<body> | |||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> | |||
<symbol id="link" viewBox="0 0 16 16"> | |||
<title>Link</title> | |||
<path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path> | |||
</symbol> | |||
</svg> | |||
<div class="page-wrap"> | |||
<div class="side-bar"> | |||
<div class="site-header"> | |||
<a href="{{ site.url }}{{ site.baseurl }}" class="site-title lh-tight">{% include title.html %}</a> | |||
<button class="menu-button fs-3 js-main-nav-trigger" data-text-toggle="Hide" type="button">Menu</button> | |||
</div> | |||
<div class="navigation main-nav js-main-nav"> | |||
{% include nav.html %} | |||
</div> | |||
<footer class="site-footer"> | |||
<p class="text-small text-grey-dk-000 mb-4">This site uses <a href="https://github.com/pmarsceill/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.</p> | |||
</footer> | |||
</div> | |||
<div class="main-content-wrap js-main-content" tabindex="0"> | |||
<div class="main-content"> | |||
<div class="page-header js-page-header"> | |||
{% if site.search_enabled != false %} | |||
<div class="search"> | |||
<div class="search-input-wrap"> | |||
<input type="text" class="js-search-input search-input" tabindex="0" placeholder="Search {{ site.title }}" aria-label="Search {{ site.title }}" autocomplete="off"> | |||
<svg width="14" height="14" viewBox="0 0 28 28" xmlns="http://www.w3.org/2000/svg" class="search-icon"><title>Search</title><g fill-rule="nonzero"><path d="M17.332 20.735c-5.537 0-10-4.6-10-10.247 0-5.646 4.463-10.247 10-10.247 5.536 0 10 4.601 10 10.247s-4.464 10.247-10 10.247zm0-4c3.3 0 6-2.783 6-6.247 0-3.463-2.7-6.247-6-6.247s-6 2.784-6 6.247c0 3.464 2.7 6.247 6 6.247z"/><path d="M11.672 13.791L.192 25.271 3.02 28.1 14.5 16.62z"/></g></svg> | |||
</div> | |||
<div class="js-search-results search-results-wrap"></div> | |||
</div> | |||
{% endif %} | |||
{% if site.aux_links != nil %} | |||
<ul class="list-style-none text-small aux-nav"> | |||
{% for link in site.aux_links %} | |||
<li class="d-inline-block my-0{% unless forloop.last %} mr-2{% endunless %}"><a href="{{ link.last }}">{{ link.first }}</a></li> | |||
{% endfor %} | |||
</ul> | |||
{% endif %} | |||
</div> | |||
<div class="page"> | |||
{% unless page.url == "/" %} | |||
{% if page.parent %} | |||
<nav class="breadcrumb-nav"> | |||
<ol class="breadcrumb-nav-list"> | |||
{% if page.grand_parent %} | |||
<li class="breadcrumb-nav-list-item"><a href="{{ first_level_url }}">{{ page.grand_parent }}</a></li> | |||
<li class="breadcrumb-nav-list-item"><a href="{{ second_level_url }}">{{ page.parent }}</a></li> | |||
{% else %} | |||
<li class="breadcrumb-nav-list-item"><a href="{{ first_level_url }}">{{ page.parent }}</a></li> | |||
{% endif %} | |||
<li class="breadcrumb-nav-list-item"><span>{{ page.title }}</span></li> | |||
</ol> | |||
</nav> | |||
{% endif %} | |||
{% endunless %} | |||
<div id="main-content" class="page-content" role="main"> | |||
{% if site.heading_anchors != false %} | |||
{% include vendor/anchor_headings.html html=content beforeHeading="true" anchorBody="<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><use xlink:href=\"#link\"></use></svg>" anchorClass="anchor-heading" %} | |||
{% else %} | |||
{{ content }} | |||
{% endif %} | |||
{% if page.has_children == true and page.has_toc != false %} | |||
<hr> | |||
<h2 class="text-delta">Table of contents</h2> | |||
{% assign children_list = site.pages | sort:"nav_order" %} | |||
<ul> | |||
{% for child in children_list %} | |||
{% if child.parent == page.title and child.title != page.title %} | |||
<li> | |||
<a href="{{ child.url | absolute_url }}">{{ child.title }}</a>{% if child.summary %} - {{ child.summary }}{% endif %} | |||
</li> | |||
{% endif %} | |||
{% endfor %} | |||
</ul> | |||
{% endif %} | |||
{% if site.footer_content != nil %} | |||
<hr> | |||
<footer role="contentinfo"> | |||
<p class="text-small text-grey-dk-000 mb-0">{{ site.footer_content }}</p> | |||
</footer> | |||
{% endif %} | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</body> | |||
</html> |
@@ -1,5 +0,0 @@ | |||
--- | |||
layout: default | |||
--- | |||
{{ content }} |
@@ -1,5 +0,0 @@ | |||
--- | |||
layout: default | |||
--- | |||
{{ content }} |
@@ -1,5 +0,0 @@ | |||
--- | |||
layout: default | |||
--- | |||
{{ content }} |
@@ -1,7 +0,0 @@ | |||
--- | |||
layout: vendor/compress | |||
--- | |||
{% assign content_ = content | replace: '<table', '<div class="table-wrapper"><table' %} | |||
{% assign content_ = content_ | replace: '</table>', '</table></div>' %} | |||
{{ content_ }} |
@@ -1,10 +0,0 @@ | |||
--- | |||
# Jekyll layout that compresses HTML | |||
# v3.1.0 | |||
# http://jch.penibelst.de/ | |||
# © 2014–2015 Anatol Broder | |||
# MIT License | |||
--- | |||
{% capture _LINE_FEED %} | |||
{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment or site.compress_html.ignore.envs == "all" %}{{ 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 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 %} |
@@ -1,111 +0,0 @@ | |||
// | |||
// Base element style overrides | |||
// | |||
// stylelint-disable selector-no-type, selector-max-type | |||
* { | |||
box-sizing: border-box; | |||
} | |||
::selection { | |||
color: $white; | |||
background: $link-color; | |||
} | |||
html { | |||
@include fs-4; | |||
} | |||
body { | |||
font-family: $body-font-family; | |||
font-size: inherit; | |||
line-height: $body-line-height; | |||
color: $body-text-color; | |||
background-color: $body-background-color; | |||
} | |||
p, | |||
h1, | |||
h2, | |||
h3, | |||
h4, | |||
h5, | |||
h6, | |||
ol, | |||
ul, | |||
pre, | |||
address, | |||
blockquote, | |||
dl, | |||
div, | |||
fieldset, | |||
form, | |||
hr, | |||
noscript, | |||
table { | |||
margin-top: 0; | |||
} | |||
h1, | |||
h2, | |||
h3, | |||
h4, | |||
h5, | |||
h6 { | |||
margin-top: 1.2em; | |||
margin-bottom: 0.8em; | |||
font-weight: 500; | |||
line-height: $body-heading-line-height; | |||
color: $body-heading-color; | |||
} | |||
p { | |||
margin-bottom: 1em; | |||
} | |||
a { | |||
color: $link-color; | |||
text-decoration: none; | |||
} | |||
a:not([class]) { | |||
text-decoration: none; | |||
background-image: linear-gradient($border-color 0%, $border-color 100%); | |||
background-repeat: repeat-x; | |||
background-position: 0 100%; | |||
background-size: 1px 1px; | |||
&:hover { | |||
background-image: linear-gradient(rgba($link-color, 0.45) 0%, rgba($link-color, 0.45) 100%); | |||
background-size: 1px 1px; | |||
} | |||
} | |||
code { | |||
font-family: $mono-font-family; | |||
font-size: 12px; | |||
line-height: $body-line-height; | |||
} | |||
figure, | |||
pre { | |||
margin: 0; | |||
} | |||
li { | |||
margin: 0.25em 0; | |||
} | |||
img { | |||
max-width: 100%; | |||
height: auto; | |||
} | |||
hr { | |||
height: 1px; | |||
padding: 0; | |||
margin: $sp-6 0; | |||
background-color: $border-color; | |||
border: 0; | |||
} |
@@ -1,118 +0,0 @@ | |||
// | |||
// Buttons and things that look like buttons | |||
// | |||
// stylelint-disable color-named | |||
.btn { | |||
display: inline-block; | |||
box-sizing: border-box; | |||
padding-top: 0.3em; | |||
padding-right: 1em; | |||
padding-bottom: 0.3em; | |||
padding-left: 1em; | |||
margin: 0; | |||
font-family: inherit; | |||
font-size: inherit; | |||
font-weight: 500; | |||
line-height: 1.5; | |||
color: $link-color; | |||
text-decoration: none; | |||
vertical-align: baseline; | |||
cursor: pointer; | |||
background-color: $base-button-color; | |||
border-width: 0; | |||
border-radius: $border-radius; | |||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); | |||
appearance: none; | |||
&:focus { | |||
text-decoration: none; | |||
outline: none; | |||
box-shadow: 0 0 0 3px rgba(blue, 0.25); | |||
} | |||
&:focus:hover, | |||
&.selected:focus { | |||
box-shadow: 0 0 0 3px rgba(blue, 0.25); | |||
} | |||
&:hover, | |||
&.zeroclipboard-is-hover { | |||
color: darken($link-color, 2%); | |||
} | |||
&:hover, | |||
&:active, | |||
&.zeroclipboard-is-hover, | |||
&.zeroclipboard-is-active { | |||
text-decoration: none; | |||
background-color: darken($base-button-color, 1%); | |||
} | |||
&:active, | |||
&.selected, | |||
&.zeroclipboard-is-active { | |||
background-color: darken($base-button-color, 3%); | |||
background-image: none; | |||
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); | |||
} | |||
&.selected:hover { | |||
background-color: darken(#dcdcdc, 5%); | |||
} | |||
&:disabled, | |||
&.disabled { | |||
&, | |||
&:hover { | |||
color: rgba(102, 102, 102, 0.5); | |||
cursor: default; | |||
background-color: rgba(229, 229, 229, 0.5); | |||
background-image: none; | |||
box-shadow: none; | |||
} | |||
} | |||
} | |||
.btn-outline { | |||
color: $link-color; | |||
background: transparent; | |||
box-shadow: inset 0 0 0 2px $grey-lt-300; | |||
&:hover, | |||
&:active, | |||
&.zeroclipboard-is-hover, | |||
&.zeroclipboard-is-active { | |||
color: darken($link-color, 4%); | |||
text-decoration: none; | |||
background-color: transparent; | |||
box-shadow: inset 0 0 0 3px $grey-lt-300; | |||
} | |||
&:focus { | |||
text-decoration: none; | |||
outline: none; | |||
box-shadow: inset 0 0 0 2px $grey-dk-100, 0 0 0 3px rgba(blue, 0.25); | |||
} | |||
&:focus:hover, | |||
&.selected:focus { | |||
box-shadow: inset 0 0 0 2px $grey-dk-100; | |||
} | |||
} | |||
.btn-primary { | |||
@include btn-color($white, $btn-primary-color); | |||
} | |||
.btn-purple { | |||
@include btn-color($white, $purple-100); | |||
} | |||
.btn-blue { | |||
@include btn-color($white, $blue-000); | |||
} | |||
.btn-green { | |||
@include btn-color($white, $green-100); | |||
} |
@@ -1,123 +0,0 @@ | |||
// | |||
// Code and syntax highlighting | |||
// | |||
// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type | |||
code { | |||
padding: 0.2em 0.15em; | |||
font-weight: 400; | |||
background-color: $code-background-color; | |||
border: $border $border-color; | |||
border-radius: $border-radius; | |||
} | |||
pre.highlight, | |||
figure.highlight { | |||
padding: $sp-3; | |||
margin-bottom: 0; | |||
-webkit-overflow-scrolling: touch; | |||
background-color: $code-background-color; | |||
code { | |||
padding: 0; | |||
border: 0; | |||
} | |||
} | |||
.highlighter-rouge { | |||
margin-bottom: $sp-3; | |||
overflow: hidden; | |||
border-radius: $border-radius; | |||
} | |||
.highlight .c { color: #586e75; } // comment // | |||
.highlight .err { color: #93a1a1; } // error // | |||
.highlight .g { color: #93a1a1; } // generic // | |||
.highlight .k { color: #859900; } // keyword // | |||
.highlight .l { color: #93a1a1; } // literal // | |||
.highlight .n { color: #93a1a1; } // name // | |||
.highlight .o { color: #859900; } // operator // | |||
.highlight .x { color: #cb4b16; } // other // | |||
.highlight .p { color: #93a1a1; } // punctuation // | |||
.highlight .cm { color: #586e75; } // comment.multiline // | |||
.highlight .cp { color: #859900; } // comment.preproc // | |||
.highlight .c1 { color: #586e75; } // comment.single // | |||
.highlight .cs { color: #859900; } // comment.special // | |||
.highlight .gd { color: #2aa198; } // generic.deleted // | |||
.highlight .ge { font-style: italic; color: #93a1a1; } // generic.emph // | |||
.highlight .gr { color: #dc322f; } // generic.error // | |||
.highlight .gh { color: #cb4b16; } // generic.heading // | |||
.highlight .gi { color: #859900; } // generic.inserted // | |||
.highlight .go { color: #93a1a1; } // generic.output // | |||
.highlight .gp { color: #93a1a1; } // generic.prompt // | |||
.highlight .gs { font-weight: bold; color: #93a1a1; } // generic.strong // | |||
.highlight .gu { color: #cb4b16; } // generic.subheading // | |||
.highlight .gt { color: #93a1a1; } // generic.traceback // | |||
.highlight .kc { color: #cb4b16; } // keyword.constant // | |||
.highlight .kd { color: #268bd2; } // keyword.declaration // | |||
.highlight .kn { color: #859900; } // keyword.namespace // | |||
.highlight .kp { color: #859900; } // keyword.pseudo // | |||
.highlight .kr { color: #268bd2; } // keyword.reserved // | |||
.highlight .kt { color: #dc322f; } // keyword.type // | |||
.highlight .ld { color: #93a1a1; } // literal.date // | |||
.highlight .m { color: #2aa198; } // literal.number // | |||
.highlight .s { color: #2aa198; } // literal.string // | |||
.highlight .na { color: #555; } // name.attribute // | |||
.highlight .nb { color: #b58900; } // name.builtin // | |||
.highlight .nc { color: #268bd2; } // name.class // | |||
.highlight .no { color: #cb4b16; } // name.constant // | |||
.highlight .nd { color: #268bd2; } // name.decorator // | |||
.highlight .ni { color: #cb4b16; } // name.entity // | |||
.highlight .ne { color: #cb4b16; } // name.exception // | |||
.highlight .nf { color: #268bd2; } // name.function // | |||
.highlight .nl { color: #555; } // name.label // | |||
.highlight .nn { color: #93a1a1; } // name.namespace // | |||
.highlight .nx { color: #555; } // name.other // | |||
.highlight .py { color: #93a1a1; } // name.property // | |||
.highlight .nt { color: #268bd2; } // name.tag // | |||
.highlight .nv { color: #268bd2; } // name.variable // | |||
.highlight .ow { color: #859900; } // operator.word // | |||
.highlight .w { color: #93a1a1; } // 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: #586e75; } // literal.string.backtick // | |||
.highlight .sc { color: #2aa198; } // literal.string.char // | |||
.highlight .sd { color: #93a1a1; } // literal.string.doc // | |||
.highlight .s2 { color: #2aa198; } // literal.string.double // | |||
.highlight .se { color: #cb4b16; } // literal.string.escape // | |||
.highlight .sh { color: #93a1a1; } // 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: #268bd2; } // name.builtin.pseudo // | |||
.highlight .vc { color: #268bd2; } // name.variable.class // | |||
.highlight .vg { color: #268bd2; } // name.variable.global // | |||
.highlight .vi { color: #268bd2; } // name.variable.instance // | |||
.highlight .il { color: #2aa198; } // literal.number.integer.long // | |||
// | |||
// Code examples (rendered) | |||
// | |||
.code-example { | |||
padding: $sp-3; | |||
margin-bottom: $sp-3; | |||
overflow: auto; | |||
border: 1px solid $border-color; | |||
border-radius: $border-radius; | |||
+ .highlighter-rouge, | |||
+ figure.highlight { | |||
position: relative; | |||
margin-top: -$sp-4; | |||
border-right: 1px solid $border-color; | |||
border-bottom: 1px solid $border-color; | |||
border-left: 1px solid $border-color; | |||
border-top-left-radius: 0; | |||
border-top-right-radius: 0; | |||
} | |||
} |
@@ -1,17 +0,0 @@ | |||
$body-background-color: $grey-dk-300; | |||
$sidebar-color: $grey-dk-300; | |||
$border-color: $grey-dk-200; | |||
$body-text-color: $grey-lt-300; | |||
$body-heading-color: $grey-lt-000; | |||
$nav-child-link-color: $grey-dk-000; | |||
$search-result-preview-color: $grey-dk-000; | |||
$link-color: $blue-000; | |||
$btn-primary-color: $blue-200; | |||
$base-button-color: $grey-dk-250; | |||
$code-background-color: $grey-dk-250; | |||
$search-background-color: $grey-dk-250; | |||
$table-background-color: $grey-dk-250; |
@@ -1,160 +0,0 @@ | |||
@charset "UTF-8"; | |||
// | |||
// Styles for rendered markdown in the .main-content container | |||
// | |||
// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type | |||
.page-content { | |||
line-height: $content-line-height; | |||
a { | |||
overflow: hidden; | |||
text-overflow: ellipsis; | |||
white-space: nowrap; | |||
} | |||
ul, | |||
ol { | |||
padding-left: 1.5em; | |||
} | |||
ol { | |||
list-style-type: none; | |||
counter-reset: step-counter; | |||
> li { | |||
position: relative; | |||
&::before { | |||
position: absolute; | |||
top: 0.2em; | |||
left: -1.6em; | |||
color: $grey-dk-000; | |||
content: counter(step-counter); | |||
counter-increment: step-counter; | |||
@include fs-3; | |||
@include mq(sm) { | |||
top: 0.11em; | |||
} | |||
} | |||
ol { | |||
counter-reset: sub-counter; | |||
li { | |||
&::before { | |||
content: counter(sub-counter, lower-alpha); | |||
counter-increment: sub-counter; | |||
} | |||
} | |||
} | |||
} | |||
} | |||
ul { | |||
list-style: none; | |||
> li { | |||
&::before { | |||
position: absolute; | |||
margin-left: -1.4em; | |||
color: $grey-dk-000; | |||
content: "•"; | |||
} | |||
} | |||
} | |||
.task-list { | |||
padding-left: 0; | |||
} | |||
.task-list-item { | |||
display: flex; | |||
align-items: center; | |||
&::before { | |||
content: ""; | |||
} | |||
} | |||
.task-list-item-checkbox { | |||
margin-right: 0.6em; | |||
} | |||
hr + * { | |||
margin-top: 0; | |||
} | |||
h1:first-of-type { | |||
margin-top: 0.5em; | |||
} | |||
dl { | |||
display: grid; | |||
grid-template-columns: max-content 1fr; | |||
} | |||
dt, | |||
dd { | |||
margin: 0.25em 0; | |||
} | |||
dt { | |||
text-align: right; | |||
&::after { | |||
content: ":"; | |||
} | |||
} | |||
dd { | |||
margin-left: 1em; | |||
font-weight: 500; | |||
} | |||
.anchor-heading { | |||
position: absolute; | |||
right: -$sp-4; | |||
width: $sp-5; | |||
height: 100%; | |||
padding-right: $sp-1; | |||
padding-left: $sp-1; | |||
overflow: visible; | |||
@include mq(md) { | |||
right: auto; | |||
left: -$sp-5; | |||
} | |||
svg { | |||
display: inline-block; | |||
width: 100%; | |||
height: 100%; | |||
fill: $link-color; | |||
visibility: hidden; | |||
} | |||
} | |||
.anchor-heading:hover, | |||
h1:hover > .anchor-heading, | |||
h2:hover > .anchor-heading, | |||
h3:hover > .anchor-heading, | |||
h4:hover > .anchor-heading, | |||
h5:hover > .anchor-heading, | |||
h6:hover > .anchor-heading { | |||
svg { | |||
visibility: visible; | |||
} | |||
} | |||
h1, | |||
h2, | |||
h3, | |||
h4, | |||
h5, | |||
h6 { | |||
position: relative; | |||
} | |||
} |
@@ -1,129 +0,0 @@ | |||
//// | |||
//// Typography | |||
//// | |||
//$body-font-family: -apple-system, BlinkMacSystemFont, "helvetica neue", helvetica, roboto, noto, "segoe ui", arial, sans-serif; | |||
//$mono-font-family: "SFMono-Regular", Menlo, Consolas, Monospace; | |||
//$root-font-size: 16px; // Base font-size for rems | |||
//$body-line-height: 1.4; | |||
//$content-line-height: 1.5; | |||
//$body-heading-line-height: 1.15; | |||
//// | |||
//// Colors | |||
//// | |||
//$white: #fff; | |||
//$grey-dk-000: #959396; | |||
//$grey-dk-100: #5c5962; | |||
//$grey-dk-200: #44434d; | |||
//$grey-dk-250: #302d36; | |||
//$grey-dk-300: #27262b; | |||
//$grey-lt-000: #f5f6fa; | |||
//$grey-lt-100: #eeebee; | |||
//$grey-lt-200: #ecebed; | |||
//$grey-lt-300: #e6e1e8; | |||
//$purple-000: #7253ed; | |||
//$purple-100: #5e41d0; | |||
//$purple-200: #4e26af; | |||
//$purple-300: #381885; | |||
//$blue-000: #2c84fa; | |||
//$blue-100: #2869e6; | |||
//$blue-200: #264caf; | |||
//$blue-300: #183385; | |||
//$green-000: #41d693; | |||
//$green-100: #11b584; | |||
//$green-200: #009c7b; | |||
//$green-300: #026e57; | |||
//$yellow-000: #ffeb82; | |||
//$yellow-100: #fadf50; | |||
//$yellow-200: #f7d12e; | |||
//$yellow-300: #e7af06; | |||
//$red-000: #f77e7e; | |||
//$red-100: #f96e65; | |||
//$red-200: #e94c4c; | |||
//$red-300: #dd2e2e; | |||
//$body-background-color: $white; | |||
//$sidebar-color: $grey-lt-000; | |||
//$search-background-color: $white; | |||
//$table-background-color: $white; | |||
//$code-background-color: $grey-lt-000; | |||
//$body-text-color: $grey-dk-100; | |||
//$body-heading-color: $grey-dk-300; | |||
//$search-result-preview-color: $grey-dk-000; | |||
//$nav-child-link-color: $grey-dk-100; | |||
//$link-color: $purple-000; | |||
//$btn-primary-color: $purple-100; | |||
//$base-button-color: #f7f7f7; | |||
//// | |||
//// Spacing | |||
//// | |||
//$spacing-unit: 1rem; // 1rem == 16px | |||
//$spacers: ( | |||
//sp-0: 0, | |||
//sp-1: $spacing-unit * 0.25, | |||
//sp-2: $spacing-unit * 0.5, | |||
//sp-3: $spacing-unit * 0.75, | |||
//sp-4: $spacing-unit, | |||
//sp-5: $spacing-unit * 1.5, | |||
//sp-6: $spacing-unit * 2, | |||
//sp-7: $spacing-unit * 2.5, | |||
//sp-8: $spacing-unit * 3, | |||
//sp-9: $spacing-unit * 3.5, | |||
//sp-10: $spacing-unit * 4 | |||
//); | |||
//$sp-1: map-get($spacers, sp-1); // 0.25 rem == 4px | |||
//$sp-2: map-get($spacers, sp-2); // 0.5 rem == 8px | |||
//$sp-3: map-get($spacers, sp-3); // 0.75 rem == 12px | |||
//$sp-4: map-get($spacers, sp-4); // 1 rem == 16px | |||
//$sp-5: map-get($spacers, sp-5); // 1.5 rem == 24px | |||
//$sp-6: map-get($spacers, sp-6); // 2 rem == 32px | |||
//$sp-7: map-get($spacers, sp-7); // 2.5 rem == 40px | |||
//$sp-8: map-get($spacers, sp-8); // 3 rem == 48px | |||
//$sp-9: map-get($spacers, sp-9); // 4 rem == 48px | |||
//$sp-10: map-get($spacers, sp-10); // 4.5 rem == 48px | |||
//// | |||
//// Borders | |||
//// | |||
//$border: 1px solid; | |||
//$border-radius: 4px; | |||
//$border-color: $grey-lt-100; | |||
//// | |||
//// Grid system | |||
//// | |||
//$gutter-spacing: $sp-6; | |||
//$gutter-spacing-sm: $sp-4; | |||
//$nav-width: 264px; | |||
//$nav-width-md: 248px; | |||
//$content-width: 800px; | |||
//$header-height: 60px; | |||
//$search-results-width: 500px; | |||
//// | |||
//// Media queries in pixels | |||
//// | |||
//$media-queries: ( | |||
//xs: 320px, | |||
//sm: 500px, | |||
//md: $content-width, | |||
//lg: $content-width + $nav-width, | |||
//xl: 1400px | |||
//); |
@@ -1,36 +0,0 @@ | |||
// | |||
// Labels (not the form kind) | |||
// | |||
.label, | |||
.label-blue { | |||
display: inline-block; | |||
padding-top: 0.16em; | |||
padding-right: 0.42em; | |||
padding-bottom: 0.16em; | |||
padding-left: 0.42em; | |||
margin-right: $sp-1; | |||
margin-left: $sp-1; | |||
color: $white; | |||
text-transform: uppercase; | |||
vertical-align: middle; | |||
background-color: $blue-100; | |||
@include fs-2; | |||
} | |||
.label-green { | |||
background-color: $green-200; | |||
} | |||
.label-purple { | |||
background-color: $purple-100; | |||
} | |||
.label-red { | |||
background-color: $red-200; | |||
} | |||
.label-yellow { | |||
color: $grey-dk-200; | |||
background-color: $yellow-200; | |||
} |
@@ -1,209 +0,0 @@ | |||
// | |||
// The basic two column layout | |||
// | |||
.page-wrap { | |||
@include mq(md) { | |||
position: absolute; | |||
top: 0; | |||
left: 0; | |||
display: flex; | |||
width: 100%; | |||
height: 100%; | |||
overflow-x: hidden; | |||
overflow-y: hidden; | |||
} | |||
} | |||
.side-bar { | |||
z-index: 100; | |||
display: flex; | |||
flex-wrap: wrap; | |||
background-color: $sidebar-color; | |||
@include mq(md) { | |||
flex-wrap: nowrap; | |||
position: absolute; | |||
width: $nav-width-md; | |||
height: 100%; | |||
flex-direction: column; | |||
border-right: $border $border-color; | |||
align-items: flex-end; | |||
} | |||
@include mq(lg) { | |||
width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width}); | |||
min-width: $nav-width; | |||
} | |||
} | |||
.main-content-wrap { | |||
@include mq(md) { | |||
position: absolute; | |||
top: 0; | |||
left: 0; | |||
width: 100%; | |||
height: 100%; | |||
-webkit-overflow-scrolling: touch; | |||
overflow-x: hidden; | |||
overflow-y: scroll; | |||
} | |||
} | |||
.main-content { | |||
@include mq(md) { | |||
position: relative; | |||
max-width: $content-width; | |||
margin-left: $nav-width-md; | |||
} | |||
@include mq(lg) { | |||
margin-left: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width}); | |||
} | |||
} | |||
.js-main-content:focus { | |||
outline: none; | |||
} | |||
.page { | |||
@include container; | |||
padding-top: $gutter-spacing-sm; | |||
padding-bottom: $gutter-spacing-sm; | |||
@include mq(md) { | |||
padding-top: $gutter-spacing; | |||
padding-bottom: $gutter-spacing; | |||
} | |||
} | |||
.page-header { | |||
@include container; | |||
display: none; | |||
padding-top: $gutter-spacing-sm; | |||
padding-bottom: $gutter-spacing-sm; | |||
background-color: $sidebar-color; | |||
@include mq(md) { | |||
display: flex; | |||
justify-content: flex-end; | |||
height: $header-height; | |||
background-color: $body-background-color; | |||
border-bottom: $border $border-color; | |||
} | |||
&.nav-open { | |||
display: block; | |||
@include mq(md) { | |||
display: flex; | |||
} | |||
} | |||
} | |||
.navigation, | |||
.site-header, | |||
.site-footer { | |||
width: 100%; | |||
@include mq(lg) { | |||
width: $nav-width; | |||
} | |||
} | |||
.navigation { | |||
@include container; | |||
@include mq(md) { | |||
padding-top: $sp-8; | |||
padding-bottom: $gutter-spacing-sm; | |||
overflow-y: auto; | |||
flex: 1 1 auto; | |||
} | |||
} | |||
.site-header { | |||
display: flex; | |||
min-height: $header-height; | |||
align-items: center; | |||
@include mq(md) { | |||
z-index: 101; | |||
height: $header-height; | |||
max-height: $header-height; | |||
border-bottom: $border $border-color; | |||
} | |||
} | |||
.site-title { | |||
@include container; | |||
flex-grow: 1; | |||
display: flex; | |||
height: 100%; | |||
align-items: center; | |||
padding-top: $sp-3; | |||
padding-bottom: $sp-3; | |||
color: $body-heading-color; | |||
@include fs-6; | |||
@include mq(md) { | |||
padding-top: $sp-2; | |||
padding-bottom: $sp-2; | |||
} | |||
} | |||
@if variable-exists(logo) { | |||
.site-logo { | |||
width: 100%; | |||
height: 100%; | |||
background-image: url($logo); | |||
background-repeat: no-repeat; | |||
background-position: left center; | |||
background-size: contain; | |||
} | |||
} | |||
.menu-button { | |||
appearance: none; | |||
display: flex; | |||
height: 100%; | |||
padding: $gutter-spacing-sm; | |||
align-items: center; | |||
color: $link-color; | |||
text-transform: uppercase; | |||
background: transparent; | |||
border: 0; | |||
@include mq(md) { | |||
display: none; | |||
} | |||
} | |||
// stylelint-disable selector-max-type | |||
body { | |||
position: relative; | |||
padding-bottom: $sp-10; | |||
@include mq(md) { | |||
position: static; | |||
padding-bottom: 0; | |||
} | |||
} | |||
// stylelint-enable selector-max-type | |||
.site-footer { | |||
@include container; | |||
position: absolute; | |||
bottom: 0; | |||
left: 0; | |||
padding-top: $sp-4; | |||
padding-bottom: $sp-4; | |||
@include mq(md) { | |||
position: static; | |||
justify-self: end; | |||
} | |||
} |
@@ -1,120 +0,0 @@ | |||
// | |||
// Main nav, breadcrumb, etc... | |||
// | |||
.navigation-list { | |||
padding: 0; | |||
margin-top: 0; | |||
margin-bottom: 0; | |||
list-style: none; | |||
} | |||
.navigation-list-child-list { | |||
padding-left: $sp-3; | |||
list-style: none; | |||
.navigation-list-link { | |||
color: $nav-child-link-color; | |||
} | |||
.navigation-list-item { | |||
position: relative; | |||
&::before { | |||
position: absolute; | |||
margin-top: 0.3em; | |||
margin-left: -0.8em; | |||
color: rgba($body-text-color, 0.3); | |||
content: "- "; | |||
} | |||
&.active { | |||
&::before { | |||
color: $body-text-color; | |||
} | |||
} | |||
} | |||
} | |||
.navigation-list-item { | |||
@include fs-4; | |||
margin: 0; | |||
@include mq(md) { | |||
@include fs-3; | |||
} | |||
.navigation-list-child-list { | |||
display: none; | |||
} | |||
&.active { | |||
.navigation-list-child-list { | |||
display: block; | |||
} | |||
} | |||
} | |||
.navigation-list-link { | |||
display: block; | |||
padding-top: $sp-1; | |||
padding-bottom: $sp-1; | |||
&.active { | |||
font-weight: 600; | |||
color: $body-heading-color; | |||
text-decoration: none; | |||
} | |||
} | |||
// Small screen nav | |||
.main-nav { | |||
display: none; | |||
&.nav-open { | |||
display: block; | |||
} | |||
@include mq(md) { | |||
display: block; | |||
} | |||
} | |||
.aux-nav { | |||
align-self: center; | |||
} | |||
// Breadcrumb nav | |||
.breadcrumb-nav { | |||
@include mq(md) { | |||
margin-top: -$sp-4; | |||
} | |||
} | |||
.breadcrumb-nav-list { | |||
padding-left: 0; | |||
margin-bottom: $sp-3; | |||
list-style: none; | |||
} | |||
.breadcrumb-nav-list-item { | |||
display: table-cell; | |||
@include fs-2; | |||
&::before { | |||
display: none; | |||
} | |||
&::after { | |||
display: inline-block; | |||
margin-right: $sp-2; | |||
margin-left: $sp-2; | |||
color: $grey-dk-000; | |||
content: "/"; | |||
} | |||
&:last-child { | |||
&::after { | |||
content: ""; | |||
} | |||
} | |||
} |
@@ -1,3 +0,0 @@ | |||
// | |||
// Custom overrides from a user. | |||
// |
@@ -1,167 +0,0 @@ | |||
// | |||
// Search input and autocomplete | |||
// | |||
.search { | |||
position: relative; | |||
z-index: 99; | |||
flex-grow: 1; | |||
height: 100%; | |||
margin-bottom: $sp-3; | |||
@include mq(md) { | |||
margin-bottom: 0; | |||
} | |||
} | |||
.search-input-wrap { | |||
display: flex; | |||
height: 100%; | |||
padding: $sp-2; | |||
background-color: $search-background-color; | |||
border-radius: $border-radius; | |||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); | |||
@include mq(md) { | |||
padding-top: 0; | |||
padding-right: 0; | |||
padding-bottom: 0; | |||
padding-left: 0; | |||
background-color: $body-background-color; | |||
border-radius: 0; | |||
box-shadow: none; | |||
} | |||
} | |||
.search-input { | |||
align-self: center; | |||
width: 100%; | |||
padding-top: $sp-1; | |||
padding-bottom: $sp-1; | |||
background-color: $search-background-color; | |||
border-top: 0; | |||
border-right: 0; | |||
border-bottom: 0; | |||
border-left: 0; | |||
order: 2; | |||
@include fs-4; | |||
&:focus { | |||
outline: 0; | |||
box-shadow: none; | |||
+ .search-icon { | |||
fill: $link-color; | |||
} | |||
} | |||
@include mq(md) { | |||
background-color: $body-background-color; | |||
@include fs-3; | |||
} | |||
} | |||
.search-icon { | |||
align-self: center; | |||
margin-right: $sp-2; | |||
fill: $grey-dk-000; | |||
order: 1; | |||
} | |||
.search-results-wrap { | |||
position: absolute; | |||
z-index: 100; | |||
display: none; | |||
width: 100%; | |||
background: $search-background-color; | |||
border-radius: $border-radius; | |||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); | |||
&.active { | |||
display: block; | |||
} | |||
@include mq(md) { | |||
width: $search-results-width; | |||
} | |||
} | |||
.search-results-list { | |||
padding-left: 0; | |||
margin-top: $sp-1; | |||
margin-bottom: $sp-1; | |||
list-style: none; | |||
@include fs-4; | |||
@include mq(md) { | |||
@include fs-3; | |||
} | |||
} | |||
.search-results-list-item { | |||
padding: 0; | |||
margin: 0; | |||
} | |||
.search-result { | |||
display: block; | |||
padding-top: $sp-1; | |||
padding-right: $sp-3; | |||
padding-bottom: $sp-1; | |||
padding-left: $sp-3; | |||
&:hover, | |||
&.active { | |||
background-color: $sidebar-color; | |||
} | |||
@include mq(md) { | |||
padding-right: $sp-4; | |||
padding-left: $sp-4; | |||
} | |||
} | |||
.search-result-title { | |||
display: block; | |||
padding-top: $sp-2; | |||
padding-right: $sp-4; | |||
padding-bottom: $sp-2; | |||
@include mq(sm) { | |||
display: inline-block; | |||
width: 40%; | |||
word-wrap: break-word; | |||
vertical-align: top; | |||
} | |||
} | |||
.search-result-rel-url { | |||
display: block; | |||
overflow: hidden; | |||
color: $search-result-preview-color; | |||
text-overflow: ellipsis; | |||
white-space: nowrap; | |||
@include fs-1; | |||
} | |||
.search-result-preview { | |||
display: block; | |||
padding-top: $sp-2; | |||
padding-bottom: $sp-2; | |||
padding-left: $sp-4; | |||
color: $search-result-preview-color; | |||
border-left: $border; | |||
border-left-color: $border-color; | |||
@include fs-2; | |||
@include mq(sm) { | |||
display: inline-block; | |||
width: 60%; | |||
vertical-align: top; | |||
} | |||
} | |||
.search-result-highlight { | |||
font-weight: bold; | |||
color: $link-color; | |||
} |
@@ -1,10 +0,0 @@ | |||
@function rem($size, $unit:"") { | |||
$remSize: $size / $root-font-size; | |||
@if ($unit == false) { | |||
@return #{$remSize}; | |||
} | |||
@else { | |||
@return #{$remSize}rem; | |||
} | |||
} |
@@ -1,129 +0,0 @@ | |||
// | |||
// Typography | |||
// | |||
$body-font-family: -apple-system, BlinkMacSystemFont, "helvetica neue", helvetica, roboto, noto, "segoe ui", arial, sans-serif !default; | |||
$mono-font-family: "SFMono-Regular", Menlo, Consolas, Monospace !default; | |||
$root-font-size: 16px !default; // Base font-size for rems | |||
$body-line-height: 1.4 !default; | |||
$content-line-height: 1.5 !default; | |||
$body-heading-line-height: 1.15 !default !default; | |||
// | |||
// Colors | |||
// | |||
$white: #fff !default; | |||
$grey-dk-000: #959396 !default; | |||
$grey-dk-100: #5c5962 !default; | |||
$grey-dk-200: #44434d !default; | |||
$grey-dk-250: #302d36 !default; | |||
$grey-dk-300: #27262b !default; | |||
$grey-lt-000: #f5f6fa !default; | |||
$grey-lt-100: #eeebee !default; | |||
$grey-lt-200: #ecebed !default; | |||
$grey-lt-300: #e6e1e8 !default; | |||
$purple-000: #7253ed !default; | |||
$purple-100: #5e41d0 !default; | |||
$purple-200: #4e26af !default; | |||
$purple-300: #381885 !default; | |||
$blue-000: #2c84fa !default; | |||
$blue-100: #2869e6 !default; | |||
$blue-200: #264caf !default; | |||
$blue-300: #183385 !default; | |||
$green-000: #41d693 !default; | |||
$green-100: #11b584 !default; | |||
$green-200: #009c7b !default; | |||
$green-300: #026e57 !default; | |||
$yellow-000: #ffeb82 !default; | |||
$yellow-100: #fadf50 !default; | |||
$yellow-200: #f7d12e !default; | |||
$yellow-300: #e7af06 !default; | |||
$red-000: #f77e7e !default; | |||
$red-100: #f96e65 !default; | |||
$red-200: #e94c4c !default; | |||
$red-300: #dd2e2e !default; | |||
$body-background-color: $white !default; | |||
$sidebar-color: $grey-lt-000 !default; | |||
$search-background-color: $white !default; | |||
$table-background-color: $white !default; | |||
$code-background-color: $grey-lt-000 !default; | |||
$body-text-color: $grey-dk-100 !default; | |||
$body-heading-color: $grey-dk-300 !default; | |||
$search-result-preview-color: $grey-dk-000 !default; | |||
$nav-child-link-color: $grey-dk-100 !default; | |||
$link-color: $purple-000 !default; | |||
$btn-primary-color: $purple-100 !default; | |||
$base-button-color: #f7f7f7 !default; | |||
// | |||
// Spacing | |||
// | |||
$spacing-unit: 1rem; // 1rem == 16px | |||
$spacers: ( | |||
sp-0: 0, | |||
sp-1: $spacing-unit * 0.25, | |||
sp-2: $spacing-unit * 0.5, | |||
sp-3: $spacing-unit * 0.75, | |||
sp-4: $spacing-unit, | |||
sp-5: $spacing-unit * 1.5, | |||
sp-6: $spacing-unit * 2, | |||
sp-7: $spacing-unit * 2.5, | |||
sp-8: $spacing-unit * 3, | |||
sp-9: $spacing-unit * 3.5, | |||
sp-10: $spacing-unit * 4 | |||
) !default; | |||
$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px | |||
$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px | |||
$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px | |||
$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px | |||
$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px | |||
$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px | |||
$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px | |||
$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px | |||
$sp-9: map-get($spacers, sp-9) !default; // 4 rem == 48px | |||
$sp-10: map-get($spacers, sp-10) !default; // 4.5 rem == 48px | |||
// | |||
// Borders | |||
// | |||
$border: 1px solid !default; | |||
$border-radius: 4px !default; | |||
$border-color: $grey-lt-100 !default; | |||
// | |||
// Grid system | |||
// | |||
$gutter-spacing: $sp-6 !default; | |||
$gutter-spacing-sm: $sp-4 !default; | |||
$nav-width: 264px !default; | |||
$nav-width-md: 248px !default; | |||
$content-width: 800px !default; | |||
$header-height: 60px !default; | |||
$search-results-width: 500px !default; | |||
// | |||
// Media queries in pixels | |||
// | |||
$media-queries: ( | |||
xs: 320px, | |||
sm: 500px, | |||
md: $content-width, | |||
lg: $content-width + $nav-width, | |||
xl: 1400px | |||
) !default; |
@@ -1,27 +0,0 @@ | |||
// Colored button | |||
@mixin btn-color($fg, $bg) { | |||
color: $fg; | |||
background-color: darken($bg, 2%); | |||
background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%)); | |||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12); | |||
&:hover, | |||
&.zeroclipboard-is-hover { | |||
color: $fg; | |||
background-color: darken($bg, 4%); | |||
background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%))); | |||
} | |||
&:active, | |||
&.selected, | |||
&.zeroclipboard-is-active { | |||
background-color: darken($bg, 5%); | |||
background-image: none; | |||
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); | |||
} | |||
&.selected:hover { | |||
background-color: darken($bg, 10%); | |||
} | |||
} |
@@ -1,36 +0,0 @@ | |||
// Media query | |||
// Media query mixin | |||
// Usage: | |||
// @include mq(md) { | |||
// ..medium and up styles | |||
// } | |||
@mixin mq($name) { | |||
// Retrieves the value from the key | |||
$value: map-get($media-queries, $name); | |||
// If the key exists in the map | |||
@if $value != null { | |||
// Prints a media query based on the value | |||
@media (min-width: rem($value)) { | |||
@content; | |||
} | |||
} | |||
@else { | |||
@warn "No value could be retrieved from `#{$media-query}`. " | |||
+ "Please make sure it is defined in `$media-queries` map."; | |||
} | |||
} | |||
// Responsive container | |||
@mixin container { | |||
padding-right: $gutter-spacing-sm; | |||
padding-left: $gutter-spacing-sm; | |||
@include mq(md) { | |||
padding-right: $gutter-spacing; | |||
padding-left: $gutter-spacing; | |||
} | |||
} |
@@ -1,81 +0,0 @@ | |||
// Font size | |||
@mixin fs-1 { | |||
font-size: 9px !important; | |||
@include mq(sm) { | |||
font-size: 10px !important; | |||
} | |||
} | |||
@mixin fs-2 { | |||
font-size: 11px !important; | |||
@include mq(sm) { | |||
font-size: 12px !important; | |||
} | |||
} | |||
@mixin fs-3 { | |||
font-size: 12px !important; | |||
@include mq(sm) { | |||
font-size: 14px !important; | |||
} | |||
} | |||
@mixin fs-4 { | |||
font-size: 14px !important; | |||
@include mq(sm) { | |||
font-size: 16px !important; | |||
} | |||
} | |||
@mixin fs-5 { | |||
font-size: 16px !important; | |||
@include mq(sm) { | |||
font-size: 18px !important; | |||
} | |||
} | |||
@mixin fs-6 { | |||
font-size: 18px !important; | |||
@include mq(sm) { | |||
font-size: 24px !important; | |||
} | |||
} | |||
@mixin fs-7 { | |||
font-size: 24px !important; | |||
@include mq(sm) { | |||
font-size: 32px !important; | |||
} | |||
} | |||
@mixin fs-8 { | |||
font-size: 32px !important; | |||
@include mq(sm) { | |||
font-size: 36px !important; | |||
} | |||
} | |||
@mixin fs-9 { | |||
font-size: 36px !important; | |||
@include mq(sm) { | |||
font-size: 42px !important; | |||
} | |||
} | |||
@mixin fs-10 { | |||
font-size: 42px !important; | |||
@include mq(sm) { | |||
font-size: 48px !important; | |||
} | |||
} |
@@ -1,3 +0,0 @@ | |||
@import "./layout"; | |||
@import "./buttons"; | |||
@import "./typography"; |
@@ -1,3 +0,0 @@ | |||
@import "./variables"; | |||
@import "./functions"; | |||
@import "./mixins/mixins"; |
@@ -1,58 +0,0 @@ | |||
// | |||
// Tables | |||
// | |||
// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type | |||
.table-wrapper { | |||
display: block; | |||
width: 100%; | |||
max-width: 100%; | |||
margin-bottom: $sp-5; | |||
overflow-x: auto; | |||
border-radius: $border-radius; | |||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); | |||
} | |||
table { | |||
display: table; | |||
min-width: 100%; | |||
border-collapse: separate; | |||
} | |||
th, | |||
td { | |||
@include fs-3; | |||
min-width: 120px; | |||
padding-top: $sp-2; | |||
padding-right: $sp-3; | |||
padding-bottom: $sp-2; | |||
padding-left: $sp-3; | |||
background-color: $table-background-color; | |||
border-bottom: $border rgba($border-color, 0.5); | |||
border-left: $border $border-color; | |||
&:first-of-type { | |||
border-left: 0; | |||
} | |||
} | |||
tbody { | |||
tr { | |||
&:last-of-type { | |||
th, | |||
td { | |||
border-bottom: 0; | |||
} | |||
td { | |||
padding-bottom: $sp-3; | |||
} | |||
} | |||
} | |||
} | |||
thead { | |||
th { | |||
border-bottom: $border $border-color; | |||
} | |||
} |
@@ -1,58 +0,0 @@ | |||
// | |||
// Typography | |||
// | |||
// stylelint-disable primer/selector-no-utility, primer/no-override, selector-no-type, selector-max-type | |||
h1, | |||
.text-alpha { | |||
@include fs-8; | |||
font-weight: 300; | |||
} | |||
h2, | |||
.text-beta { | |||
@include fs-6; | |||
} | |||
h3, | |||
.text-gamma { | |||
@include fs-5; | |||
} | |||
h4, | |||
.text-delta { | |||
@include fs-2; | |||
font-weight: 300; | |||
text-transform: uppercase; | |||
letter-spacing: 0.1em; | |||
} | |||
h5, | |||
.text-epsilon { | |||
@include fs-3; | |||
color: $grey-dk-200; | |||
} | |||
h6, | |||
.text-zeta { | |||
@include fs-2; | |||
color: $grey-dk-200; | |||
} | |||
li { | |||
.highlight { | |||
margin-top: $sp-2; | |||
} | |||
} | |||
.text-small { | |||
@include fs-2; | |||
} | |||
.text-mono { | |||
font-family: $mono-font-family !important; | |||
} | |||
.text-center { | |||
text-align: center !important; | |||
} |
@@ -1,239 +0,0 @@ | |||
// | |||
// Utility classes for colors | |||
// | |||
// Text colors | |||
.text-grey-dk-000 { | |||
color: $grey-dk-000 !important; | |||
} | |||
.text-grey-dk-100 { | |||
color: $grey-dk-100 !important; | |||
} | |||
.text-grey-dk-200 { | |||
color: $grey-dk-200 !important; | |||
} | |||
.text-grey-dk-250 { | |||
color: $grey-dk-250 !important; | |||
} | |||
.text-grey-dk-300 { | |||
color: $grey-dk-300 !important; | |||
} | |||
.text-grey-lt-000 { | |||
color: $grey-lt-000 !important; | |||
} | |||
.text-grey-lt-100 { | |||
color: $grey-lt-100 !important; | |||
} | |||
.text-grey-lt-200 { | |||
color: $grey-lt-200 !important; | |||
} | |||
.text-grey-lt-300 { | |||
color: $grey-lt-300 !important; | |||
} | |||
.text-blue-000 { | |||
color: $blue-000 !important; | |||
} | |||
.text-blue-100 { | |||
color: $blue-100 !important; | |||
} | |||
.text-blue-200 { | |||
color: $blue-200 !important; | |||
} | |||
.text-blue-300 { | |||
color: $blue-300 !important; | |||
} | |||
.text-green-000 { | |||
color: $green-000 !important; | |||
} | |||
.text-green-100 { | |||
color: $green-100 !important; | |||
} | |||
.text-green-200 { | |||
color: $green-200 !important; | |||
} | |||
.text-green-300 { | |||
color: $green-300 !important; | |||
} | |||
.text-purple-000 { | |||
color: $purple-000 !important; | |||
} | |||
.text-purple-100 { | |||
color: $purple-100 !important; | |||
} | |||
.text-purple-200 { | |||
color: $purple-200 !important; | |||
} | |||
.text-purple-300 { | |||
color: $purple-300 !important; | |||
} | |||
.text-yellow-000 { | |||
color: $yellow-000 !important; | |||
} | |||
.text-yellow-100 { | |||
color: $yellow-100 !important; | |||
} | |||
.text-yellow-200 { | |||
color: $yellow-200 !important; | |||
} | |||
.text-yellow-300 { | |||
color: $yellow-300 !important; | |||
} | |||
.text-red-000 { | |||
color: $red-000 !important; | |||
} | |||
.text-red-100 { | |||
color: $red-100 !important; | |||
} | |||
.text-red-200 { | |||
color: $red-200 !important; | |||
} | |||
.text-red-300 { | |||
color: $red-300 !important; | |||
} | |||
// Background colors | |||
.bg-grey-dk-000 { | |||
background-color: $grey-dk-000 !important; | |||
} | |||
.bg-grey-dk-100 { | |||
background-color: $grey-dk-100 !important; | |||
} | |||
.bg-grey-dk-200 { | |||
background-color: $grey-dk-200 !important; | |||
} | |||
.bg-grey-dk-250 { | |||
background-color: $grey-dk-250 !important; | |||
} | |||
.bg-grey-dk-300 { | |||
background-color: $grey-dk-300 !important; | |||
} | |||
.bg-grey-lt-000 { | |||
background-color: $grey-lt-000 !important; | |||
} | |||
.bg-grey-lt-100 { | |||
background-color: $grey-lt-100 !important; | |||
} | |||
.bg-grey-lt-200 { | |||
background-color: $grey-lt-200 !important; | |||
} | |||
.bg-grey-lt-300 { | |||
background-color: $grey-lt-300 !important; | |||
} | |||
.bg-blue-000 { | |||
background-color: $blue-000 !important; | |||
} | |||
.bg-blue-100 { | |||
background-color: $blue-100 !important; | |||
} | |||
.bg-blue-200 { | |||
background-color: $blue-200 !important; | |||
} | |||
.bg-blue-300 { | |||
background-color: $blue-300 !important; | |||
} | |||
.bg-green-000 { | |||
background-color: $green-000 !important; | |||
} | |||
.bg-green-100 { | |||
background-color: $green-100 !important; | |||
} | |||
.bg-green-200 { | |||
background-color: $green-200 !important; | |||
} | |||
.bg-green-300 { | |||
background-color: $green-300 !important; | |||
} | |||
.bg-purple-000 { | |||
background-color: $purple-000 !important; | |||
} | |||
.bg-purple-100 { | |||
background-color: $purple-100 !important; | |||
} | |||
.bg-purple-200 { | |||
background-color: $purple-200 !important; | |||
} | |||
.bg-purple-300 { | |||
background-color: $purple-300 !important; | |||
} | |||
.bg-yellow-000 { | |||
background-color: $yellow-000 !important; | |||
} | |||
.bg-yellow-100 { | |||
background-color: $yellow-100 !important; | |||
} | |||
.bg-yellow-200 { | |||
background-color: $yellow-200 !important; | |||
} | |||
.bg-yellow-300 { | |||
background-color: $yellow-300 !important; | |||
} | |||
.bg-red-000 { | |||
background-color: $red-000 !important; | |||
} | |||
.bg-red-100 { | |||
background-color: $red-100 !important; | |||
} | |||
.bg-red-200 { | |||
background-color: $red-200 !important; | |||
} | |||
.bg-red-300 { | |||
background-color: $red-300 !important; | |||
} |
@@ -1,38 +0,0 @@ | |||
// stylelint-disable primer/selector-no-utility, primer/no-override | |||
// | |||
// Utility classes for layout | |||
// | |||
// Display | |||
.d-block { display: block !important; } | |||
.d-flex { display: flex !important; } | |||
.d-inline { display: inline !important; } | |||
.d-inline-block { display: inline-block !important; } | |||
.d-none { display: none !important; } | |||
@each $media-query in map-keys($media-queries) { | |||
@for $i from 1 through length($spacers) { | |||
@include mq($media-query) { | |||
$size: #{map-get($spacers, sp-#{$i - 1})}; | |||
$scale: #{$i - 1}; | |||
// .d-sm-block, .d-md-none, .d-lg-inline | |||
.d-#{$media-query}-block { display: block !important; } | |||
.d-#{$media-query}-flex { display: flex !important; } | |||
.d-#{$media-query}-inline { display: inline !important; } | |||
.d-#{$media-query}-inline-block { display: inline-block !important; } | |||
.d-#{$media-query}-none { display: none !important; } | |||
} | |||
} | |||
} | |||
// Vertical alignment | |||
.v-align-baseline { vertical-align: baseline !important; } | |||
.v-align-bottom { vertical-align: bottom !important; } | |||
.v-align-middle { vertical-align: middle !important; } | |||
.v-align-text-bottom { vertical-align: text-bottom !important; } | |||
.v-align-text-top { vertical-align: text-top !important; } | |||
.v-align-top { vertical-align: top !important; } |
@@ -1,17 +0,0 @@ | |||
// | |||
// Utility classes for lists | |||
// | |||
// stylelint-disable primer/selector-no-utility, primer/no-override, selector-max-type | |||
.list-style-none { | |||
padding: 0 !important; | |||
margin: 0 !important; | |||
list-style: none !important; | |||
li { | |||
&::before { | |||
display: none !important; | |||
} | |||
} | |||
} |
@@ -1,121 +0,0 @@ | |||
// | |||
// Utility classes for margins and padding | |||
// | |||
// scss-lint:disable SpaceAfterPropertyName | |||
// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before, primer/selector-no-utility, primer/no-override | |||
// Margin spacer utilities | |||
@for $i from 1 through length($spacers) { | |||
$size: #{map-get($spacers, sp-#{$i - 1})}; | |||
$scale: #{$i - 1}; | |||
// .m-0, .m-1, .m-2... | |||
.m-#{$scale} { margin: #{$size} !important; } | |||
.mt-#{$scale} { margin-top: #{$size} !important; } | |||
.mr-#{$scale} { margin-right: #{$size} !important; } | |||
.mb-#{$scale} { margin-bottom: #{$size} !important; } | |||
.ml-#{$scale} { margin-left: #{$size} !important; } | |||
.mx-#{$scale} { | |||
margin-right: #{$size} !important; | |||
margin-left: #{$size} !important; | |||
} | |||
.my-#{$scale} { | |||
margin-top: #{$size} !important; | |||
margin-bottom: #{$size} !important; | |||
} | |||
.mxn-#{$scale} { | |||
margin-right: -#{$size} !important; | |||
margin-left: -#{$size} !important; | |||
} | |||
} | |||
.mx-auto { | |||
margin-right: auto !important; | |||
margin-left: auto !important; | |||
} | |||
@each $media-query in map-keys($media-queries) { | |||
@for $i from 1 through length($spacers) { | |||
@include mq($media-query) { | |||
$size: #{map-get($spacers, sp-#{$i - 1})}; | |||
$scale: #{$i - 1}; | |||
// .m-sm-0, .m-md-1, .m-lg-2... | |||
.m-#{$media-query}-#{$scale} { margin: #{$size} !important; } | |||
.mt-#{$media-query}-#{$scale} { margin-top: #{$size} !important; } | |||
.mr-#{$media-query}-#{$scale} { margin-right: #{$size} !important; } | |||
.mb-#{$media-query}-#{$scale} { margin-bottom: #{$size} !important; } | |||
.ml-#{$media-query}-#{$scale} { margin-left: #{$size} !important; } | |||
.mx-#{$media-query}-#{$scale} { | |||
margin-right: #{$size} !important; | |||
margin-left: #{$size} !important; | |||
} | |||
.my-#{$media-query}-#{$scale} { | |||
margin-top: #{$size} !important; | |||
margin-bottom: #{$size} !important; | |||
} | |||
.mxn-#{$media-query}-#{$scale} { | |||
margin-right: -#{$size} !important; | |||
margin-left: -#{$size} !important; | |||
} | |||
} | |||
} | |||
} | |||
// Padding spacer utilities | |||
@for $i from 1 through length($spacers) { | |||
$size: #{map-get($spacers, sp-#{$i - 1})}; | |||
$scale: #{$i - 1}; | |||
// .p-0, .p-1, .p-2... | |||
.p-#{$scale} { padding: #{$size} !important; } | |||
.pt-#{$scale} { padding-top: #{$size} !important; } | |||
.pr-#{$scale} { padding-right: #{$size} !important; } | |||
.pb-#{$scale} { padding-bottom: #{$size} !important; } | |||
.pl-#{$scale} { padding-left: #{$size} !important; } | |||
.px-#{$scale} { | |||
padding-right: #{$size} !important; | |||
padding-left: #{$size} !important; | |||
} | |||
.py-#{$scale} { | |||
padding-top: #{$size} !important; | |||
padding-bottom: #{$size} !important; | |||
} | |||
} | |||
@each $media-query in map-keys($media-queries) { | |||
@include mq($media-query) { | |||
@for $i from 1 through length($spacers) { | |||
$size: #{map-get($spacers, sp-#{$i - 1})}; | |||
$scale: #{$i - 1}; | |||
// .p-sm-0, .p-md-1, .p-lg-2... | |||
.p-#{$media-query}-#{$scale} { padding: #{$size} !important; } | |||
.pt-#{$media-query}-#{$scale} { padding-top: #{$size} !important; } | |||
.pr-#{$media-query}-#{$scale} { padding-right: #{$size} !important; } | |||
.pb-#{$media-query}-#{$scale} { padding-bottom: #{$size} !important; } | |||
.pl-#{$media-query}-#{$scale} { padding-left: #{$size} !important; } | |||
.px-#{$media-query}-#{$scale} { | |||
padding-right: #{$size} !important; | |||
padding-left: #{$size} !important; | |||
} | |||
.py-#{$media-query}-#{$scale} { | |||
padding-top: #{$size} !important; | |||
padding-bottom: #{$size} !important; | |||
} | |||
} | |||
} | |||
} |
@@ -1,91 +0,0 @@ | |||
// | |||
// Utility classes for typography | |||
// | |||
// stylelint-disable primer/selector-no-utility, primer/no-override | |||
.fs-1 { | |||
@include fs-1; | |||
} | |||
.fs-2 { | |||
@include fs-2; | |||
} | |||
.fs-3 { | |||
@include fs-3; | |||
} | |||
.fs-4 { | |||
@include fs-4; | |||
} | |||
.fs-5 { | |||
@include fs-5; | |||
} | |||
.fs-6 { | |||
@include fs-6; | |||
} | |||
.fs-7 { | |||
@include fs-7; | |||
} | |||
.fs-8 { | |||
@include fs-8; | |||
} | |||
.fs-9 { | |||
@include fs-9; | |||
} | |||
.fs-10 { | |||
@include fs-10; | |||
} | |||
.fw-300 { | |||
font-weight: 300 !important; | |||
} | |||
.fw-400 { | |||
font-weight: 400 !important; | |||
} | |||
.fw-500 { | |||
font-weight: 500 !important; | |||
} | |||
.fw-700 { | |||
font-weight: 700 !important; | |||
} | |||
.lh-0 { | |||
line-height: 0 !important; | |||
} | |||
.lh-default { | |||
line-height: $body-line-height; | |||
} | |||
.lh-tight { | |||
line-height: $body-heading-line-height; | |||
} | |||
.ls-5 { | |||
letter-spacing: 0.05em !important; | |||
} | |||
.ls-10 { | |||
letter-spacing: 0.1em !important; | |||
} | |||
.ls-0 { | |||
letter-spacing: 0 !important; | |||
} | |||
.text-uppercase { | |||
text-transform: uppercase !important; | |||
} | |||
// stylelint-enable primer/selector-no-utility |
@@ -1,5 +0,0 @@ | |||
@import "./colors"; | |||
@import "./layout"; | |||
@import "./typography"; | |||
@import "./lists"; | |||
@import "./spacing"; |
@@ -1,78 +0,0 @@ | |||
# normalize.scss v0.1.0 | |||
Normalize.scss is the SCSS version of [normalize.css](http://necolas.github.io/normalize.css), a customisable CSS file that makes browsers render all elements more consistently and in line with modern standards. | |||
[View the normalize.css test file](http://necolas.github.io/normalize.css/latest/test.html) | |||
## Install | |||
* [npm](http://npmjs.org/): `npm install --save normalize.scss` | |||
* [Component(1)](https://github.com/component/component/): `component install guerrero/normalize.scss` | |||
* [Bower](http://bower.io/): `bower install --save normalize.scss` | |||
* Download: Go to [this link](https://raw.githubusercontent.com/guerrero/normalize.scss/master/normalize.scss), press right-click on the page and choose "Save as..." | |||
No other styles should come before Normalize.scss. | |||
It's recommendable to modify `normalize.scss` to suit it to your project | |||
## What does it do? | |||
* Preserves useful defaults, unlike many CSS resets. | |||
* Normalizes styles for a wide range of elements. | |||
* Corrects bugs and common browser inconsistencies. | |||
* Improves usability with subtle improvements. | |||
* Explains what code does using detailed comments. | |||
## Browser support | |||
* Google Chrome (latest) | |||
* Mozilla Firefox (latest) | |||
* Mozilla Firefox 4 | |||
* Opera (latest) | |||
* Apple Safari 6+ | |||
* Internet Explorer 8+ | |||
[Normalize.css v1 provides legacy browser | |||
support](https://github.com/necolas/normalize.css/tree/v1) (IE 6+, Safari 4+), | |||
but is no longer actively developed. | |||
## Extended details | |||
Additional detail and explanation of the esoteric parts of normalize.css. | |||
#### `pre, code, kbd, samp` | |||
The `font-family: monospace, monospace` hack fixes the inheritance and scaling | |||
of font-size for preformated text. The duplication of `monospace` is | |||
intentional. [Source](http://en.wikipedia.org/wiki/User:Davidgothberg/Test59). | |||
#### `sub, sup` | |||
Normally, using `sub` or `sup` affects the line-box height of text in all | |||
browsers. [Source](http://gist.github.com/413930). | |||
#### `svg:not(:root)` | |||
Adding `overflow: hidden` fixes IE9's SVG rendering. Earlier versions of IE | |||
don't support SVG, so we can safely use the `:not()` and `:root` selectors that | |||
modern browsers use in the default UA stylesheets to apply this style. [SVG | |||
Mailing List discussion](http://lists.w3.org/Archives/Public/public-svg-wg/2008JulSep/0339.html) | |||
#### `input[type="search"]` | |||
The search input is not fully stylable by default. In Chrome and Safari on | |||
OSX/iOS you can't control `font`, `padding`, `border`, or `background`. In | |||
Chrome and Safari on Windows you can't control `border` properly. It will apply | |||
`border-width` but will only show a border color (which cannot be controlled) | |||
for the outer 1px of that border. Applying `-webkit-appearance: textfield` | |||
addresses these issues without removing the benefits of search inputs (e.g. | |||
showing past searches). | |||
#### `legend` | |||
Adding `border: 0` corrects an IE 8–11 bug where `color` (yes, `color`) is not | |||
inherited by `legend`. | |||
## Acknowledgements | |||
Normalize.scss is a project by [Alex Guerrero](https://github.com/guerrero) based on [normalize.css](http://necolas.github.io/normalize.css) from [Nicolas Gallagher](https://github.com/necolas), co-created with [Jonathan Neal](https://github.com/jonathantneal). |
@@ -1,427 +0,0 @@ | |||
/*! normalize.scss v0.1.0 | MIT License | based on git.io/normalize */ | |||
/** | |||
* 1. Set default font family to sans-serif. | |||
* 2. Prevent iOS text size adjust after orientation change, without disabling | |||
* user zoom. | |||
*/ | |||
html { | |||
font-family: sans-serif; /* 1 */ | |||
-ms-text-size-adjust: 100%; /* 2 */ | |||
-webkit-text-size-adjust: 100%; /* 2 */ | |||
} | |||
/** | |||
* Remove default margin. | |||
*/ | |||
body { | |||
margin: 0; | |||
} | |||
/* HTML5 display definitions | |||
========================================================================== */ | |||
/** | |||
* Correct `block` display not defined for any HTML5 element in IE 8/9. | |||
* Correct `block` display not defined for `details` or `summary` in IE 10/11 | |||
* and Firefox. | |||
* Correct `block` display not defined for `main` in IE 11. | |||
*/ | |||
article, | |||
aside, | |||
details, | |||
figcaption, | |||
figure, | |||
footer, | |||
header, | |||
hgroup, | |||
main, | |||
menu, | |||
nav, | |||
section, | |||
summary { | |||
display: block; | |||
} | |||
/** | |||
* 1. Correct `inline-block` display not defined in IE 8/9. | |||
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. | |||
*/ | |||
audio, | |||
canvas, | |||
progress, | |||
video { | |||
display: inline-block; /* 1 */ | |||
vertical-align: baseline; /* 2 */ | |||
} | |||
/** | |||
* Prevent modern browsers from displaying `audio` without controls. | |||
* Remove excess height in iOS 5 devices. | |||
*/ | |||
audio:not([controls]) { | |||
display: none; | |||
height: 0; | |||
} | |||
/** | |||
* Address `[hidden]` styling not present in IE 8/9/10. | |||
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. | |||
*/ | |||
[hidden], | |||
template { | |||
display: none; | |||
} | |||
/* Links | |||
========================================================================== */ | |||
/** | |||
* Remove the gray background color from active links in IE 10. | |||
*/ | |||
a { | |||
background-color: transparent; | |||
} | |||
/** | |||
* Improve readability when focused and also mouse hovered in all browsers. | |||
*/ | |||
a:active, | |||
a:hover { | |||
outline: 0; | |||
} | |||
/* Text-level semantics | |||
========================================================================== */ | |||
/** | |||
* Address styling not present in IE 8/9/10/11, Safari, and Chrome. | |||
*/ | |||
abbr[title] { | |||
border-bottom: 1px dotted; | |||
} | |||
/** | |||
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome. | |||
*/ | |||
b, | |||
strong { | |||
font-weight: bold; | |||
} | |||
/** | |||
* Address styling not present in Safari and Chrome. | |||
*/ | |||
dfn { | |||
font-style: italic; | |||
} | |||
/** | |||
* Address variable `h1` font-size and margin within `section` and `article` | |||
* contexts in Firefox 4+, Safari, and Chrome. | |||
*/ | |||
h1 { | |||
font-size: 2em; | |||
margin: 0.67em 0; | |||
} | |||
/** | |||
* Address styling not present in IE 8/9. | |||
*/ | |||
mark { | |||
background: #ff0; | |||
color: #000; | |||
} | |||
/** | |||
* Address inconsistent and variable font size in all browsers. | |||
*/ | |||
small { | |||
font-size: 80%; | |||
} | |||
/** | |||
* Prevent `sub` and `sup` affecting `line-height` in all browsers. | |||
*/ | |||
sub, | |||
sup { | |||
font-size: 75%; | |||
line-height: 0; | |||
position: relative; | |||
vertical-align: baseline; | |||
} | |||
sup { | |||
top: -0.5em; | |||
} | |||
sub { | |||
bottom: -0.25em; | |||
} | |||
/* Embedded content | |||
========================================================================== */ | |||
/** | |||
* Remove border when inside `a` element in IE 8/9/10. | |||
*/ | |||
img { | |||
border: 0; | |||
} | |||
/** | |||
* Correct overflow not hidden in IE 9/10/11. | |||
*/ | |||
svg:not(:root) { | |||
overflow: hidden; | |||
} | |||
/* Grouping content | |||
========================================================================== */ | |||
/** | |||
* Address margin not present in IE 8/9 and Safari. | |||
*/ | |||
figure { | |||
margin: 1em 40px; | |||
} | |||
/** | |||
* Address differences between Firefox and other browsers. | |||
*/ | |||
hr { | |||
-moz-box-sizing: content-box; | |||
box-sizing: content-box; | |||
height: 0; | |||
} | |||
/** | |||
* Contain overflow in all browsers. | |||
*/ | |||
pre { | |||
overflow: auto; | |||
} | |||
/** | |||
* Address odd `em`-unit font size rendering in all browsers. | |||
*/ | |||
code, | |||
kbd, | |||
pre, | |||
samp { | |||
font-family: monospace, monospace; | |||
font-size: 1em; | |||
} | |||
/* Forms | |||
========================================================================== */ | |||
/** | |||
* Known limitation: by default, Chrome and Safari on OS X allow very limited | |||
* styling of `select`, unless a `border` property is set. | |||
*/ | |||
/** | |||
* 1. Correct color not being inherited. | |||
* Known issue: affects color of disabled elements. | |||
* 2. Correct font properties not being inherited. | |||
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome. | |||
*/ | |||
button, | |||
input, | |||
optgroup, | |||
select, | |||
textarea { | |||
color: inherit; /* 1 */ | |||
font: inherit; /* 2 */ | |||
margin: 0; /* 3 */ | |||
} | |||
/** | |||
* Address `overflow` set to `hidden` in IE 8/9/10/11. | |||
*/ | |||
button { | |||
overflow: visible; | |||
} | |||
/** | |||
* Address inconsistent `text-transform` inheritance for `button` and `select`. | |||
* All other form control elements do not inherit `text-transform` values. | |||
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. | |||
* Correct `select` style inheritance in Firefox. | |||
*/ | |||
button, | |||
select { | |||
text-transform: none; | |||
} | |||
/** | |||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` | |||
* and `video` controls. | |||
* 2. Correct inability to style clickable `input` types in iOS. | |||
* 3. Improve usability and consistency of cursor style between image-type | |||
* `input` and others. | |||
*/ | |||
button, | |||
html input[type="button"], /* 1 */ | |||
input[type="reset"], | |||
input[type="submit"] { | |||
-webkit-appearance: button; /* 2 */ | |||
cursor: pointer; /* 3 */ | |||
} | |||
/** | |||
* Re-set default cursor for disabled elements. | |||
*/ | |||
button[disabled], | |||
html input[disabled] { | |||
cursor: default; | |||
} | |||
/** | |||
* Remove inner padding and border in Firefox 4+. | |||
*/ | |||
button::-moz-focus-inner, | |||
input::-moz-focus-inner { | |||
border: 0; | |||
padding: 0; | |||
} | |||
/** | |||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in | |||
* the UA stylesheet. | |||
*/ | |||
input { | |||
line-height: normal; | |||
} | |||
/** | |||
* It's recommended that you don't attempt to style these elements. | |||
* Firefox's implementation doesn't respect box-sizing, padding, or width. | |||
* | |||
* 1. Address box sizing set to `content-box` in IE 8/9/10. | |||
* 2. Remove excess padding in IE 8/9/10. | |||
*/ | |||
input[type="checkbox"], | |||
input[type="radio"] { | |||
box-sizing: border-box; /* 1 */ | |||
padding: 0; /* 2 */ | |||
} | |||
/** | |||
* Fix the cursor style for Chrome's increment/decrement buttons. For certain | |||
* `font-size` values of the `input`, it causes the cursor style of the | |||
* decrement button to change from `default` to `text`. | |||
*/ | |||
input[type="number"]::-webkit-inner-spin-button, | |||
input[type="number"]::-webkit-outer-spin-button { | |||
height: auto; | |||
} | |||
/** | |||
* 1. Address `appearance` set to `searchfield` in Safari and Chrome. | |||
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome | |||
* (include `-moz` to future-proof). | |||
*/ | |||
input[type="search"] { | |||
-webkit-appearance: textfield; /* 1 */ | |||
-moz-box-sizing: content-box; | |||
-webkit-box-sizing: content-box; /* 2 */ | |||
box-sizing: content-box; | |||
} | |||
/** | |||
* Remove inner padding and search cancel button in Safari and Chrome on OS X. | |||
* Safari (but not Chrome) clips the cancel button when the search input has | |||
* padding (and `textfield` appearance). | |||
*/ | |||
input[type="search"]::-webkit-search-cancel-button, | |||
input[type="search"]::-webkit-search-decoration { | |||
-webkit-appearance: none; | |||
} | |||
/** | |||
* Define consistent border, margin, and padding. | |||
*/ | |||
fieldset { | |||
border: 1px solid #c0c0c0; | |||
margin: 0 2px; | |||
padding: 0.35em 0.625em 0.75em; | |||
} | |||
/** | |||
* 1. Correct `color` not being inherited in IE 8/9/10/11. | |||
* 2. Remove padding so people aren't caught out if they zero out fieldsets. | |||
*/ | |||
legend { | |||
border: 0; /* 1 */ | |||
padding: 0; /* 2 */ | |||
} | |||
/** | |||
* Remove default vertical scrollbar in IE 8/9/10/11. | |||
*/ | |||
textarea { | |||
overflow: auto; | |||
} | |||
/** | |||
* Don't inherit the `font-weight` (applied by a rule above). | |||
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X. | |||
*/ | |||
optgroup { | |||
font-weight: bold; | |||
} | |||
/* Tables | |||
========================================================================== */ | |||
/** | |||
* Remove most spacing between table cells. | |||
*/ | |||
table { | |||
border-collapse: collapse; | |||
border-spacing: 0; | |||
} | |||
td, | |||
th { | |||
padding: 0; | |||
} |
@@ -1,70 +0,0 @@ | |||
{ | |||
"_args": [ | |||
[ | |||
"normalize.scss", | |||
"/Users/pmarsceill/_projects/just-the-docs" | |||
] | |||
], | |||
"_from": "normalize.scss@*", | |||
"_id": "normalize.scss@0.1.0", | |||
"_inCache": true, | |||
"_installable": true, | |||
"_location": "/normalize.scss", | |||
"_nodeVersion": "0.10.32", | |||
"_npmUser": { | |||
"email": "alexguerrero1092@gmail.com", | |||
"name": "alexguerrero" | |||
}, | |||
"_npmVersion": "2.0.2", | |||
"_phantomChildren": {}, | |||
"_requested": { | |||
"name": "normalize.scss", | |||
"raw": "normalize.scss", | |||
"rawSpec": "", | |||
"scope": null, | |||
"spec": "*", | |||
"type": "range" | |||
}, | |||
"_requiredBy": [ | |||
"#DEV:/" | |||
], | |||
"_resolved": "https://registry.npmjs.org/normalize.scss/-/normalize.scss-0.1.0.tgz", | |||
"_shasum": "4a21dc25bd4c019c857785f829b658aba2a8f9ab", | |||
"_shrinkwrap": null, | |||
"_spec": "normalize.scss", | |||
"_where": "/Users/pmarsceill/_projects/just-the-docs", | |||
"author": "", | |||
"bugs": { | |||
"url": "https://github.com/guerrero/normalize.scss/issues" | |||
}, | |||
"dependencies": {}, | |||
"description": "Normalize.scss as a node packaged module", | |||
"devDependencies": {}, | |||
"directories": {}, | |||
"dist": { | |||
"shasum": "4a21dc25bd4c019c857785f829b658aba2a8f9ab", | |||
"tarball": "https://registry.npmjs.org/normalize.scss/-/normalize.scss-0.1.0.tgz" | |||
}, | |||
"files": [ | |||
"normalize.scss" | |||
], | |||
"gitHead": "d67d517e28615a873066438af1d4845c157c9baf", | |||
"homepage": "https://github.com/guerrero/normalize.scss", | |||
"license": "MIT", | |||
"maintainers": [ | |||
{ | |||
"name": "alexguerrero", | |||
"email": "alexguerrero1092@gmail.com" | |||
} | |||
], | |||
"name": "normalize.scss", | |||
"optionalDependencies": {}, | |||
"readme": "ERROR: No README data found!", | |||
"repository": { | |||
"type": "git", | |||
"url": "git://github.com/guerrero/normalize.scss.git" | |||
}, | |||
"scripts": {}, | |||
"style": "normalize.scss", | |||
"version": "0.1.0" | |||
} |
@@ -1,45 +0,0 @@ | |||
--- | |||
# this ensures Jekyll reads the file to be transformed into CSS later | |||
# only Main files contain this front matter, not partials. | |||
--- | |||
{% if site.logo %} | |||
$logo: "{{ site.logo | absolute_url }}"; | |||
{% endif %} | |||
// | |||
// Import external dependencies | |||
// | |||
@import "./vendor/normalize.scss/normalize.scss"; | |||
// | |||
// Import Just the Docs scss | |||
// | |||
// Support | |||
@import "./support/support"; | |||
// | |||
// Import custom color scheme scss | |||
// | |||
@import "./color_schemes/dark.scss"; | |||
// Modules | |||
@import "./base"; | |||
@import "./layout"; | |||
@import "./content"; | |||
@import "./navigation"; | |||
@import "./typography"; | |||
@import "./labels"; | |||
@import "./buttons"; | |||
@import "./search"; | |||
@import "./tables"; | |||
@import "./code"; | |||
@import "./utilities/utilities"; | |||
// | |||
// Import custom overrides | |||
// | |||
@import "./custom/custom"; |
@@ -1,49 +0,0 @@ | |||
--- | |||
# this ensures Jekyll reads the file to be transformed into CSS later | |||
# only Main files contain this front matter, not partials. | |||
--- | |||
{% if site.logo %} | |||
$logo: "{{ site.logo | absolute_url }}"; | |||
{% endif %} | |||
// | |||
// Import external dependencies | |||
// | |||
@import "./vendor/normalize.scss/normalize.scss"; | |||
// | |||
// Import Just the Docs scss | |||
// | |||
// Support | |||
@import "./support/support"; | |||
// | |||
// Import custom overrides | |||
// | |||
@import "./custom/custom"; | |||
// | |||
// Import custom color scheme scss | |||
// | |||
{% if site.color_scheme == "dark" %} | |||
@import "./color_schemes/dark.scss"; | |||
{% endif %} | |||
// Modules | |||
@import "./base"; | |||
@import "./layout"; | |||
@import "./content"; | |||
@import "./navigation"; | |||
@import "./typography"; | |||
@import "./labels"; | |||
@import "./buttons"; | |||
@import "./search"; | |||
@import "./tables"; | |||
@import "./code"; | |||
@import "./utilities/utilities"; | |||
@import "./overrides"; |
@@ -1,132 +0,0 @@ | |||
<?xml version="1.0" encoding="iso-8859-1"?> | |||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" | |||
viewBox="0 0 512.104 512.104" style="enable-background:new 0 0 512.104 512.104;" xml:space="preserve"> | |||
<g transform="translate(0 -1)"> | |||
<g transform="translate(1 2)"> | |||
<path style="fill:#A4C2F7;" d="M434.252,203.904c0,0-7.339,132.437-145.067,151.381c-11.314,1.514-22.718,2.256-34.133,2.219 | |||
c-4.352,0-8.619-0.085-12.8-0.341c-7.139-0.26-14.259-0.887-21.333-1.877C83.191,336.341,75.852,203.904,75.852,203.904H434.252z" | |||
/> | |||
<path style="fill:#E3E7F2;" d="M408.652,203.904c0,0-7.339,132.437-145.067,151.381c-7.074,0.99-14.195,1.617-21.333,1.877 | |||
c-7.139-0.26-14.259-0.887-21.333-1.877C83.191,336.341,75.852,203.904,75.852,203.904H408.652z"/> | |||
<path style="fill:#7FABFA;" d="M331.596,502.57H178.508c-2.631,0.051-5.142-1.1-6.82-3.127c-1.678-2.027-2.34-4.708-1.799-7.284 | |||
l13.653-59.733c0.955-3.93,4.489-6.687,8.533-6.656h125.952c4.045-0.031,7.579,2.725,8.533,6.656l13.653,59.733 | |||
c0.541,2.575-0.121,5.257-1.799,7.284C336.738,501.47,334.227,502.621,331.596,502.57z"/> | |||
<path style="fill:#A4C2F7;" d="M434.252,203.904c0,34.389-66.731,62.805-153.6,67.584c-8.363,0.427-16.896,0.683-25.6,0.683 | |||
c-4.267,0-8.448-0.085-12.629-0.171h-0.341l-12.629-0.512c-86.869-4.779-153.6-33.195-153.6-67.584s66.731-62.805,153.6-67.584 | |||
l12.629-0.512h0.341c4.181-0.085,8.363-0.171,12.629-0.171c8.704,0,17.237,0.256,25.6,0.683 | |||
C367.521,141.098,434.252,169.514,434.252,203.904z"/> | |||
<path style="fill:#E3E7F2;" d="M408.652,203.904c0,34.389-66.731,62.805-153.6,67.584L242.423,272h-0.341l-12.629-0.512 | |||
c-86.869-4.779-153.6-33.195-153.6-67.584s66.731-62.805,153.6-67.584l12.629-0.512h0.341l12.629,0.512 | |||
C341.921,141.098,408.652,169.514,408.652,203.904z"/> | |||
<g> | |||
<path style="fill:#4482C3;" d="M396.219,191.104c-8.337-5.393-32.836-18.671-80.213-25.6c-2.244-0.363-4.54,0.197-6.365,1.554 | |||
c-1.824,1.357-3.022,3.394-3.32,5.648c-0.682,4.658,2.537,8.987,7.194,9.677c44.058,6.468,66.014,18.287,73.387,23.04 | |||
c2.561,1.655,5.81,1.819,8.524,0.429c2.714-1.39,4.48-4.122,4.634-7.168s-1.33-5.941-3.891-7.597L396.219,191.104z"/> | |||
<path style="fill:#4482C3;" d="M194.073,165.504c-47.326,6.938-71.842,20.224-80.213,25.6c-3.959,2.559-5.093,7.843-2.534,11.802 | |||
c2.559,3.959,7.843,5.093,11.802,2.534c7.398-4.787,29.38-16.614,73.387-23.04c4.656-0.689,7.875-5.019,7.194-9.677 | |||
c-0.297-2.246-1.486-4.277-3.299-5.635C198.595,165.729,196.312,165.158,194.073,165.504z"/> | |||
</g> | |||
<g> | |||
<path style="fill:#A4C2F7;" d="M289.185,355.285v87.552c-0.028,9.414-7.653,17.039-17.067,17.067h-34.133 | |||
c-9.414-0.028-17.039-7.653-17.067-17.067v-87.552c7.074,0.99,14.195,1.617,21.333,1.877c4.181,0.256,8.448,0.341,12.8,0.341 | |||
c2.901,0,5.803-0.085,8.533-0.171C272.149,357.116,280.695,356.432,289.185,355.285z"/> | |||
<path style="fill:#A4C2F7;" d="M280.652,67.37v204.117c-8.363,0.427-16.896,0.683-25.6,0.683c-4.267,0-8.448-0.085-12.629-0.171 | |||
h-0.341l-12.629-0.512V67.37H280.652z"/> | |||
</g> | |||
<polygon style="fill:#D4E1F4;" points="255.052,67.37 255.052,271.488 242.423,272 242.081,272 229.452,271.488 229.452,67.37 | |||
"/> | |||
<g> | |||
<path style="fill:#A4C2F7;" d="M297.719,50.304c0,23.564-19.103,42.667-42.667,42.667c-4.334-0.013-8.644-0.645-12.8-1.877 | |||
c-17.783-5.632-29.868-22.136-29.868-40.789s12.085-35.157,29.868-40.789c4.156-1.232,8.466-1.864,12.8-1.877 | |||
c11.316,0,22.168,4.495,30.17,12.497C293.223,28.135,297.719,38.988,297.719,50.304z"/> | |||
<path style="fill:#A4C2F7;" d="M305.996,502.57H178.508c-2.631,0.051-5.142-1.1-6.82-3.127c-1.678-2.027-2.34-4.708-1.799-7.284 | |||
l13.653-59.733c0.955-3.93,4.489-6.687,8.533-6.656h100.352c4.045-0.031,7.579,2.725,8.533,6.656l13.653,59.733 | |||
c0.541,2.575-0.121,5.257-1.799,7.284C311.138,501.47,308.627,502.621,305.996,502.57z"/> | |||
</g> | |||
<ellipse style="fill:#E3E7F2;" cx="242.252" cy="50.304" rx="29.867" ry="40.789"/> | |||
<path style="fill:#D4E1F4;" d="M263.585,355.285v87.552c-0.028,9.414-7.653,17.039-17.067,17.067h-8.533 | |||
c-9.414-0.028-17.039-7.653-17.067-17.067v-85.504c2.731,0.085,5.632,0.171,8.533,0.171c4.352,0,8.619-0.085,12.8-0.341 | |||
C249.39,356.902,256.511,356.275,263.585,355.285z"/> | |||
</g> | |||
<g transform="translate(1 17)"> | |||
<path style="fill:#FFFFFF;" d="M229.452,121.32c-86.869,4.779-153.6,33.195-153.6,67.584c0,0,7.339,132.437,145.067,151.381 | |||
v87.552c0,9.426,7.641,17.067,17.067,17.067h8.533V340.285c-137.728-18.944-145.067-151.381-145.067-151.381 | |||
c0-30.925,53.956-57.02,128-65.434V121.32z"/> | |||
<path style="fill:#FFFFFF;" d="M183.543,417.426l-13.653,59.733c-0.541,2.575,0.121,5.257,1.799,7.284 | |||
c1.678,2.027,4.189,3.178,6.82,3.127h25.6c-2.631,0.051-5.142-1.1-6.82-3.127c-1.678-2.027-2.34-4.708-1.799-7.284l13.653-59.733 | |||
c0.955-3.93,4.489-6.687,8.533-6.656l-25.6,0C188.031,410.739,184.497,413.496,183.543,417.426z"/> | |||
</g> | |||
<g> | |||
<polygon style="fill:#FFFFFF;" points="179.474,496.037 290.407,496.037 332.63,496.037 332.63,513.104 290.407,513.104 | |||
179.474,513.104 "/> | |||
<g> | |||
<path style="fill:#428DFF;" d="M253.799,510.629c0.766-0.82,1.373-1.775,1.792-2.816c0.434-1.027,0.666-2.128,0.683-3.243 | |||
c0.02-3.467-2.059-6.601-5.261-7.931c-3.202-1.329-6.89-0.59-9.331,1.872l-1.024,1.28c-0.326,0.475-0.587,0.992-0.777,1.536 | |||
c-0.248,0.482-0.418,1.001-0.503,1.536c-0.099,0.564-0.156,1.134-0.171,1.707c0.029,2.26,0.913,4.425,2.475,6.059 | |||
C245.079,513.849,250.402,513.849,253.799,510.629z"/> | |||
<path style="fill:#428DFF;" d="M290.185,130.392v-40.03c15.823-14.152,21.271-36.601,13.696-56.432 | |||
C296.307,14.1,277.28,1,256.052,1s-40.255,13.1-47.83,32.931s-2.126,42.279,13.696,56.432v40.03 | |||
c-90.812,6.519-153.6,37.111-153.6,75.511c0,0.111,0,0.213,0,0.324c0.004,0.051,0.004,0.102,0,0.154 | |||
c0.068,1.365,9.148,134.75,145.067,158.123v54.733h-20.309c-8.055-0.092-15.077,5.461-16.845,13.321l-13.653,59.733 | |||
c-1.147,5.021,0.07,10.292,3.302,14.302c3.288,4.142,8.297,6.543,13.585,6.511h34.133c4.713,0,8.533-3.82,8.533-8.533 | |||
s-3.821-8.533-8.533-8.533h-34.133v0.094c-0.085,0-0.154-0.043-0.23-0.043l13.841-59.785h20.309v8.533 | |||
c0,14.138,11.462,25.6,25.6,25.6h34.133c14.138,0,25.6-11.462,25.6-25.6v-8.533h20.523l13.397,59.733h-50.765 | |||
c-4.713,0-8.533,3.82-8.533,8.533s3.82,8.533,8.533,8.533h50.765c5.278,0.026,10.276-2.371,13.559-6.502 | |||
c3.235-4.012,4.449-9.288,3.294-14.31l-13.653-59.733c-1.785-7.834-8.776-13.373-16.811-13.321h-20.309v-54.733 | |||
C434.62,341.131,443.7,207.747,443.785,206.381c0-0.051,0-0.102,0-0.145s0-0.222,0-0.333 | |||
C443.785,167.504,380.997,136.912,290.185,130.392z M426.719,205.827v0.29c-0.299,24.806-54.101,52.053-136.533,58.189V147.501 | |||
C374.665,153.85,426.591,182.121,426.719,205.827z M256.052,18.17c18.851,0,34.133,15.282,34.133,34.133 | |||
s-15.282,34.133-34.133,34.133s-34.133-15.282-34.133-34.133S237.201,18.17,256.052,18.17z M256.052,103.504 | |||
c5.818-0.015,11.59-1.025,17.067-2.987V265.21c-2.756,0.102-5.453,0.256-8.269,0.307c-2.816,0.051-5.888,0.119-8.798,0.119 | |||
c-5.803,0-11.477-0.128-17.067-0.333V100.517C244.462,102.479,250.234,103.489,256.052,103.504z M221.919,147.501v116.847 | |||
c-81.707-6.093-136.218-33.374-136.533-58.249v-0.273C85.513,182.121,137.481,153.85,221.919,147.501z M281.652,444.837 | |||
c0,4.713-3.82,8.533-8.533,8.533h-34.133c-4.713,0-8.533-3.82-8.533-8.533v-77.978c1.638,0.162,3.362,0.23,5.035,0.358 | |||
c1.476,0.102,2.935,0.222,4.429,0.307c10.757,0.614,21.541,0.614,32.299,0c1.459-0.077,2.893-0.188,4.335-0.299 | |||
c1.707-0.128,3.413-0.196,5.12-0.358L281.652,444.837z M289.025,348.828c-16.514,2.154-33.199,2.691-49.818,1.604 | |||
c-5.538-0.358-10.957-0.853-16.128-1.604c-82.389-11.349-115.55-64.683-128.853-103.031 | |||
c28.032,19.627,76.8,33.092,135.962,36.164c0.102,0,0.196,0.06,0.299,0.06s0.102,0,0.162,0 | |||
c8.311,0.427,16.751,0.717,25.438,0.717c3.157,0,6.221,0,9.199-0.085c5.521-0.102,10.923-0.341,16.282-0.623h0.119 | |||
c0.06,0,0.111,0,0.171,0c59.145-3.166,108.177-17.015,136.286-36.762C404.933,283.617,371.849,337.436,289.025,348.828z"/> | |||
<path style="fill:#428DFF;" d="M314.539,184.4c44.058,6.468,66.014,18.287,73.387,23.04c2.561,1.655,5.81,1.819,8.524,0.429 | |||
c2.714-1.39,4.48-4.122,4.634-7.168c0.153-3.045-1.33-5.941-3.891-7.597c-8.337-5.393-32.836-18.671-80.213-25.6 | |||
c-2.244-0.363-4.54,0.197-6.365,1.554c-1.824,1.357-3.022,3.394-3.32,5.648c-0.331,2.247,0.247,4.534,1.607,6.353 | |||
C310.261,182.879,312.29,184.081,314.539,184.4z"/> | |||
<path style="fill:#428DFF;" d="M119.519,208.839c1.641-0.001,3.247-0.475,4.625-1.365c7.398-4.787,29.38-16.614,73.387-23.04 | |||
c4.656-0.689,7.875-5.019,7.194-9.677c-0.3-2.253-1.499-4.289-3.323-5.645c-1.824-1.356-4.119-1.918-6.363-1.557 | |||
c-47.326,6.938-71.842,20.224-80.213,25.6c-3.171,2.065-4.604,5.972-3.519,9.597 | |||
C112.391,206.378,115.734,208.855,119.519,208.839z"/> | |||
</g> | |||
</g> | |||
</g> | |||
<g> | |||
</g> | |||
<g> | |||
</g> | |||
<g> | |||
</g> | |||
<g> | |||
</g> | |||
<g> | |||
</g> | |||
<g> | |||
</g> | |||
<g> | |||
</g> | |||
<g> | |||
</g> | |||
<g> | |||
</g> | |||
<g> | |||
</g> | |||
<g> | |||
</g> | |||
<g> | |||
</g> | |||
<g> | |||
</g> | |||
<g> | |||
</g> | |||
<g> | |||
</g> | |||
</svg> |
@@ -1 +0,0 @@ | |||
<svg width="28" height="28" viewBox="0 0 28 28" xmlns="http://www.w3.org/2000/svg"><title>Search</title><g fill-rule="nonzero" fill="#959396"><path d="M17.332 20.735c-5.537 0-10-4.6-10-10.247 0-5.646 4.463-10.247 10-10.247 5.536 0 10 4.601 10 10.247s-4.464 10.247-10 10.247zm0-4c3.3 0 6-2.783 6-6.247 0-3.463-2.7-6.247-6-6.247s-6 2.784-6 6.247c0 3.464 2.7 6.247 6 6.247z"/><path d="M11.672 13.791L.192 25.271 3.02 28.1 14.5 16.62z"/></g></svg> |
@@ -1,23 +0,0 @@ | |||
document.addEventListener("DOMContentLoaded", function(){ | |||
const toggleDarkMode = document.querySelector('.js-toggle-dark-mode') | |||
const cssFile = document.querySelector('[rel="stylesheet"]') | |||
const originalCssRef = cssFile.getAttribute('href') | |||
const darkModeCssRef = originalCssRef.replace('just-the-docs.css', 'dark-mode-preview.css') | |||
const buttonCopy = ['Return to the light side', 'Preview dark color scheme'] | |||
const updateButtonText = function(toggleDarkMode) { | |||
toggleDarkMode.textContent === buttonCopy[0] ? | |||
toggleDarkMode.textContent = buttonCopy[1] : | |||
toggleDarkMode.textContent = buttonCopy[0] | |||
} | |||
jtd.addEvent(toggleDarkMode, 'click', function(){ | |||
if (cssFile.getAttribute('href') === originalCssRef) { | |||
cssFile.setAttribute('href', darkModeCssRef) | |||
updateButtonText(toggleDarkMode) | |||
} else { | |||
cssFile.setAttribute('href', originalCssRef) | |||
updateButtonText(toggleDarkMode) | |||
} | |||
}) | |||
}) |
@@ -1,312 +0,0 @@ | |||
--- | |||
--- | |||
(function (jtd, undefined) { | |||
// Event handling | |||
jtd.addEvent = function(el, type, handler) { | |||
if (el.attachEvent) el.attachEvent('on'+type, handler); else el.addEventListener(type, handler); | |||
} | |||
jtd.removeEvent = function(el, type, handler) { | |||
if (el.detachEvent) el.detachEvent('on'+type, handler); else el.removeEventListener(type, handler); | |||
} | |||
jtd.onReady = function(ready) { | |||
// in case the document is already rendered | |||
if (document.readyState!='loading') ready(); | |||
// modern browsers | |||
else if (document.addEventListener) document.addEventListener('DOMContentLoaded', ready); | |||
// IE <= 8 | |||
else document.attachEvent('onreadystatechange', function(){ | |||
if (document.readyState=='complete') ready(); | |||
}); | |||
} | |||
// Show/hide mobile menu | |||
function initNav() { | |||
const mainNav = document.querySelector('.js-main-nav'); | |||
const pageHeader = document.querySelector('.js-page-header'); | |||
const navTrigger = document.querySelector('.js-main-nav-trigger'); | |||
jtd.addEvent(navTrigger, 'click', function(e){ | |||
e.preventDefault(); | |||
var text = navTrigger.innerText; | |||
var textToggle = navTrigger.getAttribute('data-text-toggle'); | |||
mainNav.classList.toggle('nav-open'); | |||
pageHeader.classList.toggle('nav-open'); | |||
navTrigger.classList.toggle('nav-open'); | |||
navTrigger.innerText = textToggle; | |||
navTrigger.setAttribute('data-text-toggle', text); | |||
textToggle = text; | |||
}) | |||
} | |||
// Site search | |||
function initSearch() { | |||
var request = new XMLHttpRequest(); | |||
request.open('GET', '{{ "assets/js/search-data.json" | absolute_url }}', true); | |||
request.onload = function(){ | |||
if (request.status >= 200 && request.status < 400) { | |||
// Success! | |||
var data = JSON.parse(request.responseText); | |||
{% if site.search_tokenizer_separator != nil %} | |||
lunr.tokenizer.separator = {{ site.search_tokenizer_separator }} | |||
{% else %} | |||
lunr.tokenizer.separator = /[\s\-/]+/ | |||
{% endif %} | |||
var index = lunr(function () { | |||
this.ref('id'); | |||
this.field('title', { boost: 200 }); | |||
this.field('content', { boost: 2 }); | |||
this.field('url'); | |||
this.metadataWhitelist = ['position'] | |||
for (var i in data) { | |||
this.add({ | |||
id: i, | |||
title: data[i].title, | |||
content: data[i].content, | |||
url: data[i].url | |||
}); | |||
} | |||
}); | |||
searchResults(index, data); | |||
} else { | |||
// We reached our target server, but it returned an error | |||
console.log('Error loading ajax request. Request status:' + request.status); | |||
} | |||
}; | |||
request.onerror = function(){ | |||
// There was a connection error of some sort | |||
console.log('There was a connection error'); | |||
}; | |||
request.send(); | |||
function searchResults(index, data) { | |||
var index = index; | |||
var docs = data; | |||
var searchInput = document.querySelector('.js-search-input'); | |||
var searchResults = document.querySelector('.js-search-results'); | |||
function hideResults() { | |||
searchResults.innerHTML = ''; | |||
searchResults.classList.remove('active'); | |||
} | |||
jtd.addEvent(searchInput, 'keydown', function(e){ | |||
switch (e.keyCode) { | |||
case 38: // arrow up | |||
e.preventDefault(); | |||
var active = document.querySelector('.search-result.active'); | |||
if (active) { | |||
active.classList.remove('active'); | |||
if (active.parentElement.previousSibling) { | |||
var previous = active.parentElement.previousSibling.querySelector('.search-result'); | |||
previous.classList.add('active'); | |||
} | |||
} | |||
return; | |||
case 40: // arrow down | |||
e.preventDefault(); | |||
var active = document.querySelector('.search-result.active'); | |||
if (active) { | |||
if (active.parentElement.nextSibling) { | |||
var next = active.parentElement.nextSibling.querySelector('.search-result'); | |||
active.classList.remove('active'); | |||
next.classList.add('active'); | |||
} | |||
} else { | |||
var next = document.querySelector('.search-result'); | |||
if (next) { | |||
next.classList.add('active'); | |||
} | |||
} | |||
return; | |||
case 13: // enter | |||
e.preventDefault(); | |||
var active = document.querySelector('.search-result.active'); | |||
if (active) { | |||
active.click(); | |||
} else { | |||
var first = document.querySelector('.search-result'); | |||
if (first) { | |||
first.click(); | |||
} | |||
} | |||
return; | |||
} | |||
}); | |||
jtd.addEvent(searchInput, 'keyup', function(e){ | |||
switch (e.keyCode) { | |||
case 27: // When esc key is pressed, hide the results and clear the field | |||
hideResults(); | |||
searchInput.value = ''; | |||
return; | |||
case 38: // arrow up | |||
case 40: // arrow down | |||
case 13: // enter | |||
e.preventDefault(); | |||
return; | |||
} | |||
hideResults(); | |||
var input = this.value; | |||
if (input === '') { | |||
return; | |||
} | |||
var results = index.query(function (query) { | |||
var tokens = lunr.tokenizer(input) | |||
query.term(tokens, { | |||
boost: 10 | |||
}); | |||
query.term(tokens, { | |||
wildcard: lunr.Query.wildcard.TRAILING | |||
}); | |||
}); | |||
if (results.length > 0) { | |||
searchResults.classList.add('active'); | |||
var resultsList = document.createElement('ul'); | |||
resultsList.classList.add('search-results-list'); | |||
searchResults.appendChild(resultsList); | |||
for (var i in results) { | |||
var result = results[i]; | |||
var doc = docs[result.ref]; | |||
var resultsListItem = document.createElement('li'); | |||
resultsListItem.classList.add('search-results-list-item'); | |||
resultsList.appendChild(resultsListItem); | |||
var resultLink = document.createElement('a'); | |||
resultLink.classList.add('search-result'); | |||
resultLink.setAttribute('href', doc.url); | |||
resultsListItem.appendChild(resultLink); | |||
var resultTitle = document.createElement('div'); | |||
resultTitle.classList.add('search-result-title'); | |||
resultTitle.innerText = doc.title; | |||
resultLink.appendChild(resultTitle); | |||
var resultRelUrl = document.createElement('span'); | |||
resultRelUrl.classList.add('search-result-rel-url'); | |||
resultRelUrl.innerText = doc.relUrl; | |||
resultTitle.appendChild(resultRelUrl); | |||
var metadata = result.matchData.metadata; | |||
var contentFound = false; | |||
for (var j in metadata) { | |||
if (metadata[j].title) { | |||
var position = metadata[j].title.position[0]; | |||
var start = position[0]; | |||
var end = position[0] + position[1]; | |||
resultTitle.innerHTML = doc.title.substring(0, start) + '<span class="search-result-highlight">' + doc.title.substring(start, end) + '</span>' + doc.title.substring(end, doc.title.length)+'<span class="search-result-rel-url">'+doc.relUrl+'</span>'; | |||
} else if (metadata[j].content && !contentFound) { | |||
contentFound = true; | |||
var position = metadata[j].content.position[0]; | |||
var start = position[0]; | |||
var end = position[0] + position[1]; | |||
var previewStart = start; | |||
var previewEnd = end; | |||
var ellipsesBefore = true; | |||
var ellipsesAfter = true; | |||
for (var k = 0; k < 3; k++) { | |||
var nextSpace = doc.content.lastIndexOf(' ', previewStart - 2); | |||
var nextDot = doc.content.lastIndexOf('.', previewStart - 2); | |||
if ((nextDot > 0) && (nextDot > nextSpace)) { | |||
previewStart = nextDot + 1; | |||
ellipsesBefore = false; | |||
break; | |||
} | |||
if (nextSpace < 0) { | |||
previewStart = 0; | |||
ellipsesBefore = false; | |||
break; | |||
} | |||
previewStart = nextSpace + 1; | |||
} | |||
for (var k = 0; k < 10; k++) { | |||
var nextSpace = doc.content.indexOf(' ', previewEnd + 1); | |||
var nextDot = doc.content.indexOf('.', previewEnd + 1); | |||
if ((nextDot > 0) && (nextDot < nextSpace)) { | |||
previewEnd = nextDot; | |||
ellipsesAfter = false; | |||
break; | |||
} | |||
if (nextSpace < 0) { | |||
previewEnd = doc.content.length; | |||
ellipsesAfter = false; | |||
break; | |||
} | |||
previewEnd = nextSpace; | |||
} | |||
var preview = doc.content.substring(previewStart, start); | |||
if (ellipsesBefore) { | |||
preview = '... ' + preview; | |||
} | |||
preview += '<span class="search-result-highlight">' + doc.content.substring(start, end) + '</span>'; | |||
preview += doc.content.substring(end, previewEnd); | |||
if (ellipsesAfter) { | |||
preview += ' ...'; | |||
} | |||
var resultPreview = document.createElement('div'); | |||
resultPreview.classList.add('search-result-preview'); | |||
resultPreview.innerHTML = preview; | |||
resultLink.appendChild(resultPreview); | |||
} | |||
} | |||
} | |||
} | |||
}); | |||
jtd.addEvent(searchInput, 'blur', function(){ | |||
setTimeout(function(){ hideResults() }, 300); | |||
}); | |||
} | |||
} | |||
function pageFocus() { | |||
var mainContent = document.querySelector('.js-main-content'); | |||
mainContent.focus(); | |||
} | |||
// Set theme according to user preferences | |||
function setTheme() { | |||
const cssFile = document.querySelector('[rel="stylesheet"]') | |||
const originalCssRef = cssFile.getAttribute('href') | |||
const darkModeCssRef = originalCssRef.replace('just-the-docs.css', 'dark-mode-preview.css') | |||
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { | |||
cssFile.setAttribute('href', darkModeCssRef) | |||
} | |||
} | |||
// Document ready | |||
jtd.onReady(function(){ | |||
initNav(); | |||
setTheme(); | |||
pageFocus(); | |||
if (typeof lunr !== 'undefined') { | |||
initSearch(); | |||
} | |||
}); | |||
})(window.jtd = window.jtd || {}); | |||
{% include js/custom.js %} |
@@ -1,12 +0,0 @@ | |||
--- | |||
--- | |||
{ | |||
{% assign comma = false %} | |||
{% for page in site.html_pages %}{% if page.search_exclude != true %}{% if comma == true%},{% endif %}"{{ forloop.index0 }}": { | |||
"title": "{{ page.title | replace: '&', '&' }}", | |||
"content": "{{ page.content | markdownify | replace: '</h', ' . </h' | replace: '<hr', ' . <hr' | replace: '</p', ' . </p' | replace: '</ul', ' . </ul' | replace: '</tr', ' . </tr' | replace: '</li', ' | </li' | replace: '</td', ' | </td' | strip_html | escape_once | remove: 'Table of contents' | remove: '```' | remove: '---' | replace: '\', ' ' | replace: ' . . . ', ' . ' | replace: ' . . ', ' . ' | normalize_whitespace }}", | |||
"url": "{{ page.url | absolute_url }}", | |||
"relUrl": "{{ page.url }}" | |||
}{% assign comma = true %} | |||
{% endif %}{% endfor %} | |||
} |
@@ -1,16 +0,0 @@ | |||
#!/usr/bin/env ruby | |||
gem_dir = File.expand_path("..",File.dirname(__FILE__)) | |||
$LOAD_PATH.unshift gem_dir # Look in gem directory for resources first. | |||
exec_type = ARGV[0] | |||
if exec_type == 'rake' then | |||
require 'rake' | |||
require 'pp' | |||
pwd=Dir.pwd | |||
Dir.chdir(gem_dir) # We'll load rakefile from the gem's dir. | |||
Rake.application.init | |||
Rake.application.load_rakefile | |||
Dir.chdir(pwd) # Revert to original pwd for any path args passed to task. | |||
Rake.application.invoke_task(ARGV[1]) | |||
end |
@@ -1,30 +0,0 @@ | |||
--- | |||
layout: default | |||
title: Computers | |||
has_children: false | |||
nav_order: 4 | |||
--- | |||
# Supported Computers | |||
{: .no_toc } | |||
This is a list of Raspberry Pi versions validated to work with this image. | |||
{: .fs-6 .fw-300 } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
## Vanilla Version (32-bit) | |||
- Raspberry Pi Zero | |||
- Raspberry Pi 1/1+ | |||
- Raspberry Pi 2 | |||
- Raspberry Pi 3/3+ | |||
- Raspberry Pi 4 (since v2.2) | |||
## Performance Version (64-bit) | |||
TBD |
@@ -1,46 +0,0 @@ | |||
--- | |||
layout: default | |||
title: Airspy HF+ Discovery | |||
parent: Radios | |||
nav_order: 1 | |||
--- | |||
# Airspy HF+ Discovery | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
## Specifications | |||
| Specification | Value | | |||
|:----------------|:----------------| | |||
| Frequency Range (HF Mode) | 0.5 kHz - 31 MHz | | |||
| Frequency Range (VHF Mode) | 60 to 260 MHz | | |||
| ADC Resolution | 16-bits (scaled from 18-bits) | | |||
| USB Speed | 2.0 | | |||
| TX Mode | No | | |||
| Crystal | TCXO (0.5 ppm stable) | | |||
| Bias-T | No | | |||
## Device Fingerprint | |||
```bash | |||
$ lsusb | |||
Bus 003 Device 004: ID 03eb:800c Atmel Corp. Airspy HF+ | |||
``` | |||
## Firmware Sources | |||
``` | |||
https://github.com/airspy/airspyhf | |||
``` | |||
## Supported Software | |||
- GQRX | |||
- SDRAngel | |||
- GNURadio | |||
- Soapy Remote |
@@ -1,46 +0,0 @@ | |||
--- | |||
layout: default | |||
title: Airspy Mini | |||
parent: Radios | |||
nav_order: 2 | |||
--- | |||
# Airspy Mini | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
## Specifications | |||
| Specification | Value | | |||
|:----------------|:----------------| | |||
| Frequency Range | 24 - 1700 MHz | | |||
| Bandwidth | 3, 6 or 10 Msps | | |||
| ADC Resolution | 8-bits | | |||
| USB Speed | 2.0 | | |||
| TX Mode | No | | |||
| Crystal | TCXO (0.5 ppm stable) | | |||
| Bias-T | Yes | | |||
## Device Fingerprint | |||
```bash | |||
$ lsusb | |||
Bus 001 Device 007: ID 1d50:60a1 OpenMoko, Inc. Airspy | |||
``` | |||
## Firmware Sources | |||
``` | |||
https://github.com/airspy/airspyone_host | |||
``` | |||
## Supported Software | |||
- GQRX | |||
- SDRAngel | |||
- GNURadio | |||
- Soapy Remote |
@@ -1,46 +0,0 @@ | |||
--- | |||
layout: default | |||
title: Airspy R2 | |||
parent: Radios | |||
nav_order: 3 | |||
--- | |||
# Airspy R2 | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
## Specifications | |||
| Specification | Value | | |||
|:----------------|:----------------| | |||
| Frequency Range | 24 - 1700 MHz | | |||
| Bandwidth | Up to 10 Msps | | |||
| ADC Resolution | 8-bits | | |||
| USB Speed | 2.0 | | |||
| TX Mode | No | | |||
| Crystal | TCXO (0.5 ppm stable) | | |||
| Bias-T | Yes | | |||
## Device Fingerprint | |||
```bash | |||
$ lsusb | |||
Bus 003 Device 003: ID 1d50:60a1 OpenMoko, Inc. Airspy | |||
``` | |||
## Firmware Sources | |||
``` | |||
https://github.com/airspy/airspyone_host | |||
``` | |||
## Supported Software | |||
- GQRX | |||
- SDRAngel | |||
- GNURadio | |||
- Soapy Remote |
@@ -1,42 +0,0 @@ | |||
--- | |||
layout: default | |||
title: HackRF | |||
parent: Radios | |||
nav_order: 9 | |||
--- | |||
# HackRF One | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
## Specifications | |||
| Specification | Value | | |||
|:----------------|:----------------| | |||
| Frequency Range | 1 - 6000 MHz | | |||
| Bandwidth | Up to 20 Msps | | |||
| ADC Resolution | 8-bits | | |||
| USB Speed | 2.0 | | |||
| TX Mode | Yes | | |||
| Duplex | Half | | |||
| Crystal | 20 ppm | | |||
| Bias-T | No | | |||
## Firmware Sources | |||
``` | |||
https://github.com/mossmann/hackrf.git | |||
https://github.com/pothosware/SoapyHackRF.git | |||
``` | |||
## Supported Software | |||
- GQRX | |||
- SDRAngel | |||
- GNURadio | |||
- Soapy Remote |
@@ -1,50 +0,0 @@ | |||
--- | |||
layout: default | |||
title: LimeNET Micro | |||
parent: Radios | |||
nav_order: 4 | |||
--- | |||
# LimeNET Micro | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
This device is a computer based on a Raspberry Pi 3B+ Compute Module with a built-in LimeSDR Micro. The SDR specifications are almost identical with some exceptions like the addition of a more precise oscillation crystal. This radio also has an GPSDO based on the Ublox NEO-M8T. More information about this device can be found on the [Myriad Wiki](https://wiki.myriadrf.org/LimeNET_Micro). | |||
## Specifications | |||
| Specification | Value | | |||
|:----------------|:----------------| | |||
| Frequency Range | 10 - 3500 MHz | | |||
| Bandwidth | Up to 10 Msps (Stable) | | |||
| ADC Resolution | 12-bits | | |||
| USB Speed | 2.0 (FT601) | | |||
| TX Mode | Yes | | |||
| Duplex | Full | | |||
| Crystal | Rakon OCXO (+/-5 ppb) | | |||
| Bias-T | No | | |||
## Firmware Sources | |||
``` | |||
https://github.com/myriadrf/LimeSuite | |||
https://github.com/myriadrf/gr-limesdr | |||
https://github.com/myriadrf/pyLMS7002Soapy | |||
``` | |||
## Supported Software | |||
- GNURadio | |||
- GQRX | |||
- LimeUtil | |||
- LimeVNA | |||
- SDRAngel | |||
- Soapy Remote | |||
## Command Line Tools | |||
- LimeQuickTest |
@@ -1,56 +0,0 @@ | |||
--- | |||
layout: default | |||
title: LimeSDR Mini | |||
parent: Radios | |||
nav_order: 5 | |||
--- | |||
# LimeSDR Mini | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
Smaller version of the LimeSDR USB with almost half the specifications. More information about this device can be found on the [Myriad Wiki](https://wiki.myriadrf.org/LimeSDR-Mini). | |||
## Specifications | |||
| Specification | Value | | |||
|:----------------|:----------------| | |||
| Frequency Range | 10 - 3500 MHz | | |||
| Bandwidth | Up to 30.72 Msps (Stable) | | |||
| ADC Resolution | 12-bits | | |||
| USB Speed | 3.0 (FT601) | | |||
| TX Mode | Yes | | |||
| Duplex | Full | | |||
| Crystal | Rakon TCXO (4.0 ppm stable) | | |||
| Bias-T | No | | |||
## Device Fingerprint | |||
```bash | |||
$ lsusb | |||
Bus 020 Device 009: ID 0403:601f Future Technology Devices International Limited LimeSDR Mini Serial: XXXXXXXXXXXXXX | |||
``` | |||
## Firmware Sources | |||
``` | |||
https://github.com/myriadrf/LimeSuite | |||
https://github.com/myriadrf/gr-limesdr | |||
https://github.com/myriadrf/pyLMS7002Soapy | |||
``` | |||
## Supported Software | |||
- GNURadio | |||
- GQRX | |||
- LimeUtil | |||
- LimeVNA | |||
- SDRAngel | |||
- Soapy Remote | |||
## Command Line Tools | |||
- LimeQuickTest |
@@ -1,56 +0,0 @@ | |||
--- | |||
layout: default | |||
title: LimeSDR USB | |||
parent: Radios | |||
nav_order: 6 | |||
--- | |||
# LimeSDR USB | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
More capable version of the LimeSDR Mini with double the specifications. More information about this device can be found on the [Myriad Wiki](https://wiki.myriadrf.org/LimeSDR-USB). | |||
## Specifications | |||
| Specification | Value | | |||
|:----------------|:----------------| | |||
| Frequency Range | 100 kHz - 3.8 GHz | | |||
| Bandwidth | Up to 61.44 Msps (Stable) | | |||
| ADC Resolution | 12-bits | | |||
| USB Speed | 3.0 (CYUSB3014) | | |||
| TX Mode | Yes | | |||
| Duplex | Full (2x2 MIMO) | | |||
| Crystal | Rakon TCXO (4.0 ppm stable) | | |||
| Bias-T | No | | |||
## Device Fingerprint | |||
```bash | |||
$ lsusb | |||
Bus 020 Device 010: ID 1d50:6108 1d50 LimeSDR-USB Serial: XXXXXXXXXXXXXXXXX | |||
``` | |||
## Firmware Sources | |||
``` | |||
https://github.com/myriadrf/LimeSuite | |||
https://github.com/myriadrf/gr-limesdr | |||
https://github.com/myriadrf/pyLMS7002Soapy | |||
``` | |||
## Supported Software | |||
- GNURadio | |||
- GQRX | |||
- LimeUtil | |||
- LimeVNA | |||
- SDRAngel | |||
- Soapy Remote | |||
## Command Line Tools | |||
- LimeQuickTest |
@@ -1,53 +0,0 @@ | |||
--- | |||
layout: default | |||
title: PlutoSDR | |||
parent: Radios | |||
nav_order: 7 | |||
--- | |||
# PlutoSDR | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
Software Defined Radio with a built-in ARM core based on the Xilinx Zync-7000 featuring the AD936x as the RF transceiver. | |||
## Specifications | |||
| Specification | Value | | |||
|:----------------|:----------------| | |||
| Frequency Range | 325 - 3800 MHz | | |||
| Bandwidth | Up to 20 Msps (Stable) | | |||
| ADC Resolution | 12-bits | | |||
| USB Speed | 2.0 | | |||
| TX Mode | Yes | | |||
| Bias-T | No | | |||
## Device Fingerprint | |||
```bash | |||
$ lsusb | |||
Bus 001 Device 005: ID 0456:b673 Analog Devices, Inc. PlutoSDR (ADALM-PLUTO) | |||
``` | |||
## Firmware Sources | |||
``` | |||
https://github.com/analogdevicesinc/libiio | |||
https://github.com/analogdevicesinc/libad9361-iio | |||
https://github.com/analogdevicesinc/gr-iio | |||
``` | |||
## Supported Software | |||
- GQRX | |||
- SDRAngel | |||
- GNURadio | |||
- Soapy Remote | |||
## Command Line Tools | |||
- iio_readdev | |||
- iio_info |
@@ -1,15 +0,0 @@ | |||
--- | |||
layout: default | |||
title: Radios | |||
has_children: true | |||
nav_order: 2 | |||
--- | |||
# Radio Support | |||
{: .no_toc } | |||
This is a list of software defined radios validated to work with the current version of this image.[^1] | |||
{: .fs-6 .fw-300 } | |||
--- | |||
[^1]: _The Airspy HF+ Discovery is currently not validated since my review unit still in the mail. But it should work without problems, please, contact me on [Twitter](https://twitter.com/luigifcruz) if not._ |
@@ -1,61 +0,0 @@ | |||
--- | |||
layout: default | |||
title: RTL-SDR | |||
parent: Radios | |||
nav_order: 8 | |||
--- | |||
# RTL-SDR | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
Currently, the most popular SDR device. Supported by the PiSDR with the modified library provided by the [RTL-SDR Blog](https://www.rtl-sdr.com). This library adds patches to improve performance within the L-Band, improves over-heating problems and enables the Bias-T on supported devices. | |||
## Specifications | |||
| Specification | Value | | |||
|:----------------|:----------------| | |||
| Frequency Range | 24 - 1766 MHz | | |||
| Bandwidth | Up to 2.56 Msps (Stable) | | |||
| ADC Resolution | 8-bits | | |||
| USB Speed | 2.0 | | |||
| TX Mode | No | | |||
| Crystal | TCXO (0.5-1.0 ppm stable)[^1] | | |||
| Bias-T | Yes[^1] | | |||
## Device Fingerprint | |||
```bash | |||
$ lsusb | |||
Bus 020 Device 006: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838UHIDIR Serial: 00000001 | |||
``` | |||
## Firmware Sources | |||
``` | |||
https://github.com/osmocom/rtl-sdr | |||
``` | |||
## Supported Software | |||
- GQRX | |||
- SDRAngel | |||
- GNURadio | |||
- Soapy Remote | |||
## Command Line Tools | |||
- rtl_adsb | |||
- rtl_biast | |||
- rtl_eeprom | |||
- rtl_fm | |||
- rtl_power | |||
- rtl_sdr | |||
- rtl_tcp | |||
- rtl_test | |||
--- | |||
[^1]: _Official model from the RTL-SDR blog._ |
@@ -1,30 +0,0 @@ | |||
--- | |||
layout: default | |||
title: CygnusRFI | |||
parent: Software | |||
nav_order: 9 | |||
--- | |||
# CygnusRFI | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
An open-source RFI analysis tool for Ground Stations & Radio Telescopes. Details are provided by the [GitHub Page](https://github.com/0xCoto/CygnusRFI). | |||
## Specifications | |||
- Installed Version: Master | |||
## Sources | |||
``` | |||
https://github.com/0xCoto/CygnusRFI | |||
``` | |||
## Supported Radios | |||
- GNURadio Supported Devices |
@@ -1,32 +0,0 @@ | |||
--- | |||
layout: default | |||
title: LeanSDR | |||
parent: Software | |||
nav_order: 7 | |||
--- | |||
# LeanSDR | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
Software meant to demodulate DVB-S/S2 transmissions. Details are provided by the [Documentation Page](http://www.pabr.org/radio/leandvb/leandvb.en.html). | |||
## Specifications | |||
- Installed Version: Master | |||
## Sources | |||
``` | |||
https://github.com/pabr/leansdr.git | |||
``` | |||
## Supported Radios | |||
- RTL-SDR | |||
- PlutoSDR | |||
- LimeSDR |
@@ -1,30 +0,0 @@ | |||
--- | |||
layout: default | |||
title: VIRGO | |||
parent: Software | |||
nav_order: 8 | |||
--- | |||
# VIRGO | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
An open-source Spectrometer for Radio Astronomy. Details are provided by the [GitHub Page](https://github.com/0xCoto/VIRGO). | |||
## Specifications | |||
- Installed Version: Master | |||
## Sources | |||
``` | |||
https://github.com/0xCoto/VIRGO | |||
``` | |||
## Supported Radios | |||
- GNURadio Supported Devices |
@@ -1,32 +0,0 @@ | |||
--- | |||
layout: default | |||
title: acarsdec | |||
parent: Software | |||
nav_order: 12 | |||
--- | |||
# acarsdec | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
A multi-channel ACARS decoder with built-in rtl_sdr, airspy front end or sdrplay device. Details are provided by the [GitHub Page](https://github.com/TLeconte/acarsdec). | |||
## Specifications | |||
- Installed Version: Master | |||
## Sources | |||
``` | |||
https://github.com/TLeconte/acarsdec | |||
``` | |||
## Supported Radios | |||
- RTL-SDR | |||
- Airspy | |||
- SDRPlay |
@@ -1,38 +0,0 @@ | |||
--- | |||
layout: default | |||
title: GNURadio | |||
parent: Software | |||
nav_order: 1 | |||
--- | |||
# GNURadio | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
Open-source software meant to facilitate the construction of signal-processing pipelines using DSP blocks. Widely used by the hobbyist and professional community. | |||
## Specifications | |||
- Installed Version: 3.7 | |||
## Sources | |||
``` | |||
sudo apt install gnuradio (Vanilla Version) | |||
https://github.com/gnuradio/gnuradio (Performance Version) | |||
``` | |||
## Supported Radios | |||
- Airspy HF+ Discovery | |||
- Airspy Mini | |||
- Airspy R2 | |||
- LimeNET Micro | |||
- LimeSDR Mini | |||
- LimeSDR USB | |||
- PlutoSDR | |||
- RTL-SDR |
@@ -1,27 +0,0 @@ | |||
--- | |||
layout: default | |||
title: Gpredict | |||
parent: Software | |||
nav_order: 13 | |||
--- | |||
# Gpredict | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
Gpredict is a real time satellite tracking and orbit prediction program for the Linux desktop. Details are provided by the [GitHub Page](https://github.com/csete/gpredict.git). | |||
## Specifications | |||
- Installed Version: Master | |||
## Sources | |||
``` | |||
https://github.com/csete/gpredict.git | |||
``` |
@@ -1,40 +0,0 @@ | |||
--- | |||
layout: default | |||
title: GQRX | |||
parent: Software | |||
nav_order: 2 | |||
--- | |||
# GQRX | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
Famous signal analyzer front-end software for multiple radios. Radio interface based on the gr-osmocom library. This software can only receive signals. | |||
## Specifications | |||
- Installed Version: 2.11.5 | |||
## Sources | |||
``` | |||
https://github.com/csete/gqrx | |||
``` | |||
## Supported Radios | |||
- Airspy HF+ Discovery | |||
- Airspy Mini | |||
- Airspy R2 | |||
- LimeNET Micro[^1] | |||
- LimeSDR Mini[^1] | |||
- LimeSDR USB[^1] | |||
- PlutoSDR[^1] | |||
- RTL-SDR | |||
--- | |||
[^1]: _Supported via Soapy._ |
@@ -1,32 +0,0 @@ | |||
--- | |||
layout: default | |||
title: LimeSuite | |||
parent: Software | |||
nav_order: 3 | |||
--- | |||
# LimeSuite | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
Software meant to control and configure LMS based devices. | |||
## Specifications | |||
- Installed Version: 19.04.0 | |||
## Sources | |||
``` | |||
https://github.com/myriadrf/LimeSuite | |||
``` | |||
## Supported Radios | |||
- LimeNET Micro | |||
- LimeSDR Mini | |||
- LimeSDR USB |
@@ -1,29 +0,0 @@ | |||
--- | |||
layout: default | |||
title: LimeVNA | |||
parent: Software | |||
nav_order: 4 | |||
--- | |||
# LimeVNA | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
Python toolkit to use an LMS based device (LimeSDR Mini or USB) as a Vector Network Analyzer. Details are provided by the [Github Repository](https://github.com/myriadrf/pyLMS7002Soapy). | |||
## Sources | |||
``` | |||
https://github.com/myriadrf/pyLMS7002Soapy | |||
``` | |||
## Supported Radios | |||
- LimeNET Micro | |||
- LimeSDR Mini | |||
- LimeSDR USB |
@@ -1,27 +0,0 @@ | |||
--- | |||
layout: default | |||
title: multimon-ng | |||
parent: Software | |||
nav_order: 14 | |||
--- | |||
# multimon-ng | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
A multi-mode decoder for digital transmissions. Details are provided by the [GitHub Page](https://github.com/EliasOenal/multimon-ng.git). | |||
## Specifications | |||
- Installed Version: Master | |||
## Sources | |||
``` | |||
https://github.com/EliasOenal/multimon-ng.git | |||
``` |
@@ -1,27 +0,0 @@ | |||
--- | |||
layout: default | |||
title: rpitx | |||
parent: Software | |||
nav_order: 10 | |||
--- | |||
# rpitx | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
A general radio frequency transmitter for Raspberry Pi which doesn't require any other hardware unless filter to avoid intererence. Details are provided by the [GitHub Page](https://github.com/F5OEO/rpitx.git). | |||
## Specifications | |||
- Installed Version: Master | |||
## Sources | |||
``` | |||
https://github.com/F5OEO/rpitx.git | |||
``` |
@@ -1,31 +0,0 @@ | |||
--- | |||
layout: default | |||
title: rtl_433 | |||
parent: Software | |||
nav_order: 11 | |||
--- | |||
# rtl_433 | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
A generic data receiver, mainly for the 433.92 MHz, 868 MHz (SRD), 315 MHz, 345 MHz, and 915 MHz ISM bands. Details are provided by the [GitHub Page](https://github.com/merbanan/rtl_433.git). | |||
## Specifications | |||
- Installed Version: Master | |||
## Sources | |||
``` | |||
https://github.com/merbanan/rtl_433.git | |||
``` | |||
## Supported Radios | |||
- RTL-SDR | |||
- SoapySDR Supported Devices |
@@ -1,37 +0,0 @@ | |||
--- | |||
layout: default | |||
title: SDRAngel | |||
parent: Software | |||
nav_order: 5 | |||
--- | |||
# SDRAngel | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
Signal analyzer front-end software for multiple radios. Can handle TX and RX with MIMO. Multiple signal decoders/encoders are included, for example, SSB, FM, AM, DATV, and many more. | |||
## Specifications | |||
- Installed Version: 4.12.2 | |||
## Sources | |||
``` | |||
https://github.com/f4exb/sdrangel | |||
``` | |||
## Supported Radios | |||
- Airspy HF+ Discovery | |||
- Airspy Mini | |||
- Airspy R2 | |||
- LimeNET Micro | |||
- LimeSDR Mini | |||
- LimeSDR USB | |||
- PlutoSDR | |||
- RTL-SDR |
@@ -1,44 +0,0 @@ | |||
--- | |||
layout: default | |||
title: Soapy Remote | |||
parent: Software | |||
nav_order: 6 | |||
--- | |||
# Soapy Remote | |||
{: .no_toc } | |||
## Table of contents | |||
{: .no_toc .text-delta } | |||
1. TOC | |||
{:toc} | |||
--- | |||
Software intended to share a SoapySDR compatible device with other computers through the network. More information about this program can be found on the [SoapySDR Wiki](https://github.com/pothosware/SoapyRemote/wiki). | |||
## Usage Example | |||
To start a new server accepting external IPv4 connections at port 8892: | |||
``` bash | |||
$ SoapySDRServer --bind="0.0.0.0:8892" | |||
``` | |||
## Specifications | |||
- Installed Version: 0.5.1 | |||
## Sources | |||
``` | |||
https://github.com/pothosware/SoapyRemote | |||
``` | |||
## Supported Radios | |||
- Airspy HF+ Discovery | |||
- Airspy Mini | |||
- Airspy R2 | |||
- LimeNET Micro | |||
- LimeSDR Mini | |||
- LimeSDR USB | |||
- PlutoSDR | |||
- RTL-SDR |