Compare commits
17 Commits
d7955b29ae
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 71a04890e5 | |||
| 80f081189c | |||
| 0754b07132 | |||
| b91a57f28b | |||
| 173014e06a | |||
| 3385311773 | |||
| 25f3faff03 | |||
| fa7e7df689 | |||
| 7c958e50df | |||
| 298efdb91e | |||
| bfb1829a86 | |||
| 0b2625c82c | |||
| 74631aed72 | |||
| 70a9c2ae38 | |||
| df4428297a | |||
| 242b00f28f | |||
| e186c5d6f7 |
1
.gitignore
vendored
@@ -1 +1,2 @@
|
||||
public/
|
||||
resources/
|
||||
|
||||
3
.gitmodules
vendored
@@ -1,3 +0,0 @@
|
||||
[submodule "themes/terminal"]
|
||||
path = themes/terminal
|
||||
url = https://github.com/panr/hugo-theme-terminal.git
|
||||
113
config.toml
@@ -1,75 +1,64 @@
|
||||
baseURL = "https://cedaei.com/"
|
||||
languageCode = "en-us"
|
||||
title = "Ceda EI's Blog"
|
||||
theme = "terminal"
|
||||
paginate = 5
|
||||
theme = "codex"
|
||||
copyright = "CC-BY-SA 4.0"
|
||||
pygmentsUseClasses = true
|
||||
|
||||
[params]
|
||||
# dir name of your blog content (default is `content/posts`)
|
||||
contentTypeName = "posts"
|
||||
dateFormat = "2006 Jan 2"
|
||||
description = "The Blog of Ceda EI"
|
||||
|
||||
# ["orange", "blue", "red", "green", "pink"]
|
||||
themeColor = "orange"
|
||||
twitter = "https://twitter.com/ceda_ei"
|
||||
gitlab = "https://gitlab.com/ceda_ei/"
|
||||
email = "mailto:ceda_ei@webionite.com"
|
||||
iconOrder = ["Gitlab", "Email", "Twitter"]
|
||||
showPageTitleInTOC = false
|
||||
|
||||
# if you set this to 0, only submenu trigger will be visible
|
||||
showMenuItems = 2
|
||||
# Controls the navigation
|
||||
[[menu.main]]
|
||||
identifier = "blog"
|
||||
name = "Posts"
|
||||
title = "Posts"
|
||||
url = "/posts/"
|
||||
|
||||
# show selector to switch language
|
||||
showLanguageSelector = false
|
||||
|
||||
# set theme to full screen width
|
||||
fullWidthTheme = false
|
||||
|
||||
# center theme with default width
|
||||
centerTheme = true
|
||||
|
||||
# set a custom favicon (default is a `themeColor` square)
|
||||
# favicon = "favicon.ico"
|
||||
|
||||
# set all headings to their default size (depending on browser settings)
|
||||
# it's set to `true` by default
|
||||
# oneHeadingSize = false
|
||||
|
||||
[params.twitter]
|
||||
# set Twitter handles for Twitter cards
|
||||
# see https://developer.twitter.com/en/docs/tweets/optimize-with-cards/guides/getting-started#card-and-content-attribution
|
||||
# do not include @
|
||||
creator = ""
|
||||
site = ""
|
||||
|
||||
[languages]
|
||||
[languages.en]
|
||||
languageName = "English"
|
||||
title = "Ceda EI's Blog"
|
||||
subtitle = ""
|
||||
owner = "Ceda EI"
|
||||
keywords = ""
|
||||
copyright = "CC-BY-SA-4.0"
|
||||
menuMore = "Show more"
|
||||
readMore = "Read more"
|
||||
readOtherPosts = "Read other posts"
|
||||
|
||||
[languages.en.params.logo]
|
||||
logoText = "Ceda EI's Blog"
|
||||
logoHomeLink = "/"
|
||||
|
||||
[languages.en.menu]
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "about"
|
||||
name = "About"
|
||||
url = "https://webionite.com/"
|
||||
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "rss"
|
||||
name = "Subscribe"
|
||||
url = "/index.xml"
|
||||
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "telegram"
|
||||
name = "Telegram Updates"
|
||||
url = "https://t.me/cedaei/"
|
||||
|
||||
[[languages.en.menu.main]]
|
||||
[[menu.main]]
|
||||
identifier = "source"
|
||||
title = "Source"
|
||||
name = "Source"
|
||||
url = "https://git.webionite.com/ceda_ei/cedaei.com"
|
||||
|
||||
[[menu.main]]
|
||||
identifier = "tg"
|
||||
title = "Subscribe (TG)"
|
||||
name = "Subscribe (TG)"
|
||||
url = "https://t.me/cedaei"
|
||||
|
||||
[[menu.main]]
|
||||
identifier = "rss"
|
||||
title = "Subscribe (RSS)"
|
||||
name = "Subscribe (RSS)"
|
||||
url = "/index.xml"
|
||||
|
||||
[[menu.main]]
|
||||
identifier = "tags"
|
||||
title = "Tags"
|
||||
name = "Tags"
|
||||
url = "/tags/"
|
||||
|
||||
[[menu.main]]
|
||||
identifier = "about"
|
||||
name = "About"
|
||||
title = "About"
|
||||
url = "https://webionite.com/"
|
||||
|
||||
|
||||
[markup]
|
||||
[markup.highlight]
|
||||
codeFences = false
|
||||
|
||||
# Set to false to disallow raw HTML in markdown files
|
||||
[markup.goldmark.renderer]
|
||||
unsafe = true
|
||||
|
||||
5
content/_index.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
heading: "Hi, I am Ceda EI"
|
||||
subheading: "DevOps, Vimmer, Pythonista"
|
||||
handle: "ceda_ei"
|
||||
---
|
||||
107
content/posts/figuring-out-https-mitm.md
Normal file
@@ -0,0 +1,107 @@
|
||||
+++
|
||||
title = "Figuring Out HTTPS MITM in India"
|
||||
date = "2021-12-25"
|
||||
author = "Ceda EI"
|
||||
tags = ["security", "internet"]
|
||||
keywords = ["security", "internet"]
|
||||
description = "Being served a MITM page over HTTPS"
|
||||
showFullContent = false
|
||||
+++
|
||||
|
||||
Belonging to India, I am very used to seeing random websites being blocked.
|
||||
However, today was particularly scary because the [MITM (Man In The Middle
|
||||
attack)](https://en.wikipedia.org/wiki/Man-in-the-middle\_attack) happened over
|
||||
HTTPS. I visited [usebottles.com](https://usebottles.com/) over HTTPS and was
|
||||
served with the following page.
|
||||
|
||||

|
||||
|
||||
Notice the padlock in the address bar. Checking into it, the certificate is
|
||||
valid and signed by [Cloudflare](https://cloudflare.com/).
|
||||
|
||||

|
||||
|
||||
## Further Exploration and Hypothesis
|
||||
|
||||
The initial hypothesis was that the Indian Government or the ISP has
|
||||
Cloudflare's signing keys and are serving the blocked page over HTTPS. This
|
||||
seems unlikely however and would be a very severe thing and would essentially
|
||||
erode all trust in HTTPS at scale as Cloudflare can sign any website's domain
|
||||
which essentially means that ISPs could MITM
|
||||
|
||||
After a bit of exploration, the DNS entry of
|
||||
[usebottles.com](https://usebottles.com) points to `172.67.197.25` and
|
||||
`104.21.92.184`. I checked that both of these IPs were owned by Cloudflare. To
|
||||
ensure that the DNS entries weren't being MITM attacked either, I checked for
|
||||
the same from my Hetzner Server.
|
||||
|
||||
The second possibility that arises from this is that Cloudflare itself was
|
||||
serving the blocked page. While more likely than the previous scenario, it is
|
||||
still unlikely generally. I looked for any notices from Cloudflare about this
|
||||
and could not find any.
|
||||
|
||||
At this point, I was mostly out of ideas. I looked into the source of the page
|
||||
and found something interesting. The entire page's source was the following
|
||||
(invalid) HTML:
|
||||
|
||||
```html
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0" />
|
||||
<style>
|
||||
body {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
iframe {
|
||||
width: 100%;
|
||||
height: 100%
|
||||
}
|
||||
</style>
|
||||
<iframe src="https://www.airtel.in/dot/" width="100%" height="100%" frameborder=0></iframe>
|
||||
```
|
||||
|
||||
The most interesting part of this was that the iframe's URL pointed to
|
||||
[airtel.in](https://www.airtel.in/). Airtel is an ISP in India, however, I was
|
||||
not using internet services from Airtel.
|
||||
|
||||
My presumption is based on this.
|
||||
|
||||
## Final Hypothesis
|
||||
|
||||
This is what I presume is happening.
|
||||
|
||||
```
|
||||
Me <---> Cloudflare <---> usebottles' server
|
||||
1 2
|
||||
```
|
||||
|
||||
So far, we have been assuming the MITM is happening at `1` i.e. between Me and
|
||||
Cloudflare. However, the fact that `2` is secure isn't guaranteed.
|
||||
|
||||
My best guess is that the Cloudflare server I am getting connected to happens
|
||||
to be using Airtel as the ISP. When Cloudflare's server tries to connect to
|
||||
usebottles' server, Cloudflare gets MITM attacked by their ISP - Airtel.
|
||||
Likely, SSL is not enforced between Cloudflare and usebottles' server. Thus,
|
||||
Cloudflare connects to usebottles' server over HTTP.
|
||||
|
||||
Normally, a connection would happen the following way:
|
||||
|
||||
1. I connect to https://usebottles.com/
|
||||
2. I get connected to Cloudflare's server.
|
||||
3. Cloudflare's server reaches out to usebottle's server.
|
||||
4. usebottles' server sends a response.
|
||||
5. Cloudflare signs the response with the certificate.
|
||||
6. I get a webpage over HTTPS.
|
||||
|
||||
What seems to be happening is:
|
||||
|
||||
1. I connect to https://usebottles.com/
|
||||
2. I get connected to Cloudflare's server.
|
||||
3. Cloudflare's server reaches out to usebottle's server.
|
||||
4. **Airtel intercepts the request and sends the blocking page**
|
||||
5. Cloudflare signs the **blocking page** with the certificate.
|
||||
6. I get **blocking page** served over HTTPS.
|
||||
|
||||
I would be interested in knowing if there are any alternative explanations to
|
||||
this or something I have missed. You can [contact
|
||||
me](https://webionite.com/#contact) to let me know!
|
||||
321
content/posts/python-poetry-pipx.md
Normal file
@@ -0,0 +1,321 @@
|
||||
+++
|
||||
title = "Improving Python Dependency Management With pipx and Poetry"
|
||||
date = "2021-09-19"
|
||||
author = "Ceda EI"
|
||||
tags = ["python", "development"]
|
||||
keywords = ["python", "development"]
|
||||
description = "My current dev setup with python, poetry and pipx"
|
||||
showFullContent = false
|
||||
+++
|
||||
|
||||
Over time, how I develop applications in python has changed noticeably. I will
|
||||
divide the topic into three sections and see how they tie into each other at
|
||||
the end.
|
||||
|
||||
- Development
|
||||
- Packaging
|
||||
- Usage
|
||||
|
||||
## Development
|
||||
|
||||
Under development, the issues I will focus on are the following:
|
||||
|
||||
- Dependency Management
|
||||
- Virtualenvs and managing them
|
||||
|
||||
Historically, the way to do dependency management was through
|
||||
`requirements.txt`. I found `requirements.txt` hard to manage. In that setup,
|
||||
adding a dependency and installing it was two steps:
|
||||
|
||||
- Add the package `bar` to `requirements.txt`
|
||||
- Either do `pip install bar` or `pip install -r requirements.txt`
|
||||
|
||||
While focused on development, I would often forget one or both of these steps.
|
||||
Also, the lack of a lock file was a small downside for me (could be a much
|
||||
larger downside for others). The separation between `pip` and
|
||||
`requirements.txt` can also easily lead you to accidentally depend on packages
|
||||
installed on your system or in your virtualenv but not specified in your
|
||||
`requirements.txt`.
|
||||
|
||||
Managing virtualenvs was also difficult. As a virtualenv and a project are not
|
||||
related, you need a directory structure. Otherwise, you can't tell which
|
||||
virtualenv is being used for which project. You can use the same virtualenvs
|
||||
for multiple projects, but that partially defeats the point of virtualenvs and
|
||||
makes `requirements.txt` more error-prone (higher chances of forgetting to add
|
||||
packages to it). The approach generally used is one of the following two:
|
||||
|
||||
|
||||
```
|
||||
foo/
|
||||
├── foo_src/
|
||||
└── foo_venv/
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```
|
||||
foo_src/
|
||||
└── venv/
|
||||
```
|
||||
|
||||
I preferred the second one as the first one nests the source code one
|
||||
directory deeper.
|
||||
|
||||
### A new standard - `pyproject.toml`
|
||||
|
||||
In [PEP-518](https://www.python.org/dev/peps/pep-0518/), python standardized
|
||||
the `pyproject.toml` file which allows users to choose alternate build systems
|
||||
for package generation.
|
||||
|
||||
One such project that provides an alternate build system is
|
||||
[Poetry](https://python-poetry.org/). Poetry hits the nail on the head and
|
||||
solves my major gripes with traditional tooling.
|
||||
|
||||
### Poetry and virtualenvs
|
||||
|
||||
Poetry manages the virtualenvs automatically and keeps track of which project
|
||||
uses which virtualenv automatically. Working on an existing project which uses
|
||||
poetry is as simple as this:
|
||||
|
||||
```bash
|
||||
$ git clone https://gitlab.com/ceda_ei/verlauf
|
||||
$ poetry install
|
||||
```
|
||||
|
||||
The `poetry install` command sets up the virtualenv, install all the required
|
||||
dependencies inside that, and sets up any commands accordingly (I will get to
|
||||
this soon). To activate the virtualenv, simply run:
|
||||
|
||||
```bash
|
||||
. "$(poetry env info --path)/bin/activate"
|
||||
```
|
||||
|
||||
I wrap this in a small function which lets me toggle it quickly:
|
||||
|
||||
```bash
|
||||
function poet() {
|
||||
POET_MANUAL=1
|
||||
if [[ -v VIRTUAL_ENV ]]; then
|
||||
deactivate
|
||||
else
|
||||
. "$(poetry env info --path)/bin/activate"
|
||||
fi
|
||||
}
|
||||
```
|
||||
|
||||
Running `poet` activates the virtualenv if it is not active and deactivates it if
|
||||
it is active. To make things even easier, I automatically activate and
|
||||
deactivate the virtualenv as I enter and leave the project directory. To do
|
||||
so, simply drop this in your `.bashrc`.
|
||||
|
||||
```bash
|
||||
function find_in_parent() {
|
||||
local path
|
||||
IFS="/" read -ra path <<<"$PWD"
|
||||
for ((i=${#path[@]}; i > 0; i--)); do
|
||||
local current_path=""
|
||||
for ((j=1; j<i; j++)); do
|
||||
current_path="$current_path/${path[j]}"
|
||||
done
|
||||
if [[ -e "${current_path}/$1" ]]; then
|
||||
echo "${current_path}/"
|
||||
return
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
function auto_poet() {
|
||||
ret="$?"
|
||||
if [[ -v POET_MANUAL ]]; then
|
||||
return $ret
|
||||
fi
|
||||
if find_in_parent pyproject.toml &> /dev/null; then
|
||||
if [[ ! -v VIRTUAL_ENV ]]; then
|
||||
if BASE="$(poetry env info --path)"; then
|
||||
. "$BASE/bin/activate"
|
||||
PS1=""
|
||||
else
|
||||
POET_MANUAL=1
|
||||
fi
|
||||
fi
|
||||
elif [[ -v VIRTUAL_ENV ]]; then
|
||||
deactivate
|
||||
fi
|
||||
return $ret
|
||||
}
|
||||
|
||||
PROMPT_COMMAND="auto_poet;$PROMPT_COMMAND"
|
||||
```
|
||||
|
||||
This ties in well with the `poet` function; if you use `poet` anytime in a bash
|
||||
session, activation switches from automatic to manual and changing directories
|
||||
no longer auto-toggles the virtualenv.
|
||||
|
||||

|
||||
|
||||
### Poetry and dependency management
|
||||
|
||||
Instead of using `requirements.txt`, poetry stores the dependencies inside
|
||||
`pyproject.toml`. Poetry is more strict compared to `pip` in resolving
|
||||
versioning issues. Dependencies and dev-dependencies are stored inside
|
||||
`tool.poetry.dependencies` and `tool.poetry.dev-dependencies` respectively.
|
||||
Here is an example of a `pyproject.toml` for a project I am working on.
|
||||
|
||||
```toml
|
||||
[tool.poetry]
|
||||
name = "bells"
|
||||
version = "0.3.0"
|
||||
description = "Bells is a program for keeping track of sound recordings."
|
||||
authors = ["Ceda EI <ceda_ei@webionite.com>"]
|
||||
license = "GPL-3.0"
|
||||
readme = "README.md"
|
||||
homepage = "https://gitlab.com/ceda_ei/bells.git"
|
||||
repository = "https://gitlab.com/ceda_ei/bells.git"
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
python = ">=3.7,<3.11"
|
||||
click = "^8.0.1"
|
||||
questionary = "^1.10.0"
|
||||
sounddevice = "^0.4.2"
|
||||
SoundFile = "^0.10.3"
|
||||
numpy = "^1.21.2"
|
||||
|
||||
[tool.poetry.dev-dependencies]
|
||||
|
||||
[build-system]
|
||||
requires = ["poetry-core>=1.0.0"]
|
||||
build-backend = "poetry.core.masonry.api"
|
||||
|
||||
# I will talk about this section soon
|
||||
[tool.poetry.scripts]
|
||||
bells = "bells.__main__:main"
|
||||
```
|
||||
|
||||
One of the upsides of poetry is that you don't have to manage the dependencies
|
||||
in `pyproject.toml` file yourself. Poetry adds an `npm`-like interface for
|
||||
adding and removing dependencies. To add a dependency to your project, simply
|
||||
run `poetry add bar` and it will add it to your `pyproject.toml` file and
|
||||
install it in the virtualenv as well. To remove a dependency, just run `poetry
|
||||
remove bar`. For development dependencies, just add the `--dev` flag to the
|
||||
commands.
|
||||
|
||||
## Packaging
|
||||
|
||||
Since poetry replaces the build system, we can now configure the build using
|
||||
poetry via `pyproject.toml`. Inside `pyproject.toml`, the `tool.poetry` section
|
||||
stores all the build info needed; `tool.poetry` contains the metadata,
|
||||
`tool.poetry.dependencies` contains the dependencies, `tool.poetry.source`
|
||||
contains private repository details (in case, you don't want to use PyPi).
|
||||
|
||||
One of the options is `tool.poetry.scripts`. It contains scripts that the
|
||||
project exposes. This replaces `console_scripts` in `entry_points` of
|
||||
`setuptools`.
|
||||
|
||||
For example,
|
||||
|
||||
```toml
|
||||
[tool.poetry.scripts]
|
||||
foobar = "foo.bar:main"
|
||||
```
|
||||
|
||||
This will add a script named `foobar` in your `PATH`. Running that is
|
||||
equivalent to running the following script
|
||||
|
||||
```python
|
||||
from foo.bar import main
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
|
||||
For further details, check the
|
||||
[reference](https://python-poetry.org/docs/pyproject/).
|
||||
|
||||
Poetry also removes the need for manually doing editable installs (`pip install
|
||||
-e .`). The package is automatically installed as editable when you run
|
||||
`poetry install`. Any scripts specified in `tool.poetry.scripts` are
|
||||
automatically available in your `PATH` when you activate the `venv`.[^1]
|
||||
|
||||
To build the package, simply run `poetry build`. This will generate a wheel and
|
||||
a tarball in the dist folder.
|
||||
|
||||
To publish the package to PyPi (or another repo), simply run `poetry publish`.
|
||||
You can combine the build and publish into one command with `poetry publish
|
||||
--build`.
|
||||
|
||||

|
||||
|
||||
## Usage
|
||||
|
||||
This part is more user-facing rather than dev-facing. If you want to use two
|
||||
packages globally that expose some scripts to the user, (e.g. `awscli`,
|
||||
`youtube-dl`, etc.) the general approach to do so is to run something like `pip
|
||||
install --user youtube-dl`. This install the package at the user level and
|
||||
exposes the script through `~/.local/bin/youtube-dl`. However, this installs
|
||||
all the packages at the same user level. Hypothetically, if you have two
|
||||
packages `foo` and `bar` which have conflicting dependencies, this causes an
|
||||
issue. If you run,
|
||||
|
||||
```bash
|
||||
$ pip install foo
|
||||
$ pip install bar
|
||||
$ bar # works
|
||||
$ foo # breaks because of dependency mismatch
|
||||
```
|
||||
|
||||
While installing `bar`, `pip` will install the dependencies for `bar` which
|
||||
will break `foo` after warning you[^2].
|
||||
|
||||
To solve this, there is [`pipx`](https://github.com/pypa/pipx). Pipx installs
|
||||
each package in a separate virtualenv without requiring the user to activate
|
||||
said virtualenv before using the package.[^3]
|
||||
|
||||
In the same scenario as before, doing the following works just fine.
|
||||
|
||||
```bash
|
||||
$ pipx install foo
|
||||
$ pipx install bar
|
||||
$ bar # works
|
||||
$ foo # also works
|
||||
```
|
||||
|
||||
In this scenario, both `bar` and `foo` are installed in separate virtualenvs so
|
||||
the dependency conflict doesn't matter.
|
||||
|
||||
## Some more things from my bashrc
|
||||
|
||||
```bash
|
||||
|
||||
function wrapper_no_poet() {
|
||||
local last_env
|
||||
if [[ -v VIRTUAL_ENV ]]; then
|
||||
last_env="$VIRTUAL_ENV"
|
||||
deactivate
|
||||
fi
|
||||
"$@"
|
||||
ret=$?
|
||||
if [[ -v last_env ]]; then
|
||||
. "$last_env/bin/activate"
|
||||
fi
|
||||
return $ret
|
||||
}
|
||||
|
||||
alias wnp='wrapper_no_poet'
|
||||
alias pm='POET_MANUAL=1'
|
||||
```
|
||||
|
||||
Prefixing any command with `wnp` runs it outside the virtualenv if a virtualenv
|
||||
is active. Running `pm` turns off automatic virtualenv activation.
|
||||
|
||||
|
||||
[^1]: This also allows for a nice switch between the development and production
|
||||
versions of the app. Essentially, when the virtualenv is active, you are
|
||||
using the development script while when it is deactivated, you are using
|
||||
the global (likely production) version.
|
||||
|
||||
[^2]: To be precise, it will warn you that it broke `foo` but will still
|
||||
continue with the installation
|
||||
|
||||
[^3]: For development, poetry also provides `poetry run` which runs a file
|
||||
without having to activate the virtualenv.
|
||||
BIN
static/images/auto_poet.webp
Normal file
|
After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 193 KiB After Width: | Height: | Size: 99 KiB |
BIN
static/images/poetry_build.webp
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
static/images/usebottles_censored.webp
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
static/images/usebottles_certificate.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
197
themes/codex/.all-contributorsrc
Normal file
@@ -0,0 +1,197 @@
|
||||
{
|
||||
"files": [
|
||||
"README.md"
|
||||
],
|
||||
"imageSize": 100,
|
||||
"commit": false,
|
||||
"contributors": [
|
||||
{
|
||||
"login": "jakewies",
|
||||
"name": "Jake Wiesler",
|
||||
"avatar_url": "https://avatars1.githubusercontent.com/u/12075916?v=4",
|
||||
"profile": "https://www.jakewiesler.com",
|
||||
"contributions": [
|
||||
"code",
|
||||
"design",
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "chuxinh",
|
||||
"name": "Chuxin Huang",
|
||||
"avatar_url": "https://avatars2.githubusercontent.com/u/30974572?v=4",
|
||||
"profile": "https://www.chuxinhuang.com/",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"code",
|
||||
"design"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "kentnek",
|
||||
"name": "Kent",
|
||||
"avatar_url": "https://avatars1.githubusercontent.com/u/7024160?v=4",
|
||||
"profile": "https://kentnek.com",
|
||||
"contributions": [
|
||||
"code",
|
||||
"doc",
|
||||
"design"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "somaniarushi",
|
||||
"name": "Arushi Somani",
|
||||
"avatar_url": "https://avatars3.githubusercontent.com/u/54224195?v=4",
|
||||
"profile": "https://github.com/somaniarushi",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "xvallspl",
|
||||
"name": "Xavier Valls",
|
||||
"avatar_url": "https://avatars0.githubusercontent.com/u/867299?v=4",
|
||||
"profile": "https://github.com/xvallspl",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"code",
|
||||
"design"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "pyvain",
|
||||
"name": "Pyvain",
|
||||
"avatar_url": "https://avatars3.githubusercontent.com/u/2924494?v=4",
|
||||
"profile": "https://github.com/pyvain",
|
||||
"contributions": [
|
||||
"code",
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "jlebar",
|
||||
"name": "Justin Lebar",
|
||||
"avatar_url": "https://avatars1.githubusercontent.com/u/150663?v=4",
|
||||
"profile": "http://jlebar.com",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "aareet",
|
||||
"name": "Aareet Shermon",
|
||||
"avatar_url": "https://avatars1.githubusercontent.com/u/33654?v=4",
|
||||
"profile": "https://www.aareet.com",
|
||||
"contributions": [
|
||||
"design"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "dgnicholson",
|
||||
"name": "dgnicholson",
|
||||
"avatar_url": "https://avatars1.githubusercontent.com/u/6208288?v=4",
|
||||
"profile": "https://github.com/dgnicholson",
|
||||
"contributions": [
|
||||
"design",
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "msfjarvis",
|
||||
"name": "Harsh Shandilya",
|
||||
"avatar_url": "https://avatars0.githubusercontent.com/u/13348378?v=4",
|
||||
"profile": "https://msfjarvis.dev",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "ProfessorLogout",
|
||||
"name": "Marco Kamner",
|
||||
"avatar_url": "https://avatars3.githubusercontent.com/u/13572444?v=4",
|
||||
"profile": "https://twitter.com/ProfessorLogout",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "ewenme",
|
||||
"name": "ewen",
|
||||
"avatar_url": "https://avatars3.githubusercontent.com/u/10872821?v=4",
|
||||
"profile": "https://ewen.io/",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "SanchithHegde",
|
||||
"name": "Sanchith Hegde",
|
||||
"avatar_url": "https://avatars2.githubusercontent.com/u/22217505?v=4",
|
||||
"profile": "https://github.com/SanchithHegde",
|
||||
"contributions": [
|
||||
"code",
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "CER10TY",
|
||||
"name": "Sören Johanson",
|
||||
"avatar_url": "https://avatars1.githubusercontent.com/u/5760400?v=4",
|
||||
"profile": "https://soeren.codes",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "jdl031",
|
||||
"name": "James Lloyd",
|
||||
"avatar_url": "https://avatars3.githubusercontent.com/u/1720477?v=4",
|
||||
"profile": "https://github.com/jdl031",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "wilsonehusin",
|
||||
"name": "Wilson E. Husin",
|
||||
"avatar_url": "https://avatars1.githubusercontent.com/u/14004487?v=4",
|
||||
"profile": "http://wilsonehusin.com",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "tommorris",
|
||||
"name": "Tom Morris",
|
||||
"avatar_url": "https://avatars0.githubusercontent.com/u/175?v=4",
|
||||
"profile": "https://tommorris.org/",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "sdil",
|
||||
"name": "Mohamad Fadhil",
|
||||
"avatar_url": "https://avatars0.githubusercontent.com/u/461537?v=4",
|
||||
"profile": "http://twitter.com/sdil",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "skvale",
|
||||
"name": "Sam Kvale",
|
||||
"avatar_url": "https://avatars0.githubusercontent.com/u/5314713?v=4",
|
||||
"profile": "https://github.com/skvale",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
}
|
||||
],
|
||||
"contributorsPerLine": 7,
|
||||
"projectName": "hugo-theme-codex",
|
||||
"projectOwner": "jakewies",
|
||||
"repoType": "github",
|
||||
"repoHost": "https://github.com",
|
||||
"skipCi": true
|
||||
}
|
||||
11
themes/codex/.gitignore
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
node_modules
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# IDEs
|
||||
.vscode
|
||||
|
||||
# Hugo
|
||||
public/
|
||||
11
themes/codex/.prettierignore
Normal file
@@ -0,0 +1,11 @@
|
||||
exampleSite/content
|
||||
layouts
|
||||
static
|
||||
|
||||
package.json
|
||||
public
|
||||
node_modules
|
||||
|
||||
.DS_Store
|
||||
logs
|
||||
*.log
|
||||
48
themes/codex/CONTRIBUTING.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# Contributing
|
||||
|
||||
First off, thank you for your time and effort! This project is not very large
|
||||
and easy to jump into.
|
||||
|
||||
## Getting started
|
||||
|
||||
1. Fork and clone the repository
|
||||
2. Install dependencies:
|
||||
|
||||
```bash
|
||||
cd hugo-theme-codex
|
||||
|
||||
yarn install
|
||||
```
|
||||
|
||||
## Scripts
|
||||
|
||||
```bash
|
||||
yarn develop
|
||||
```
|
||||
|
||||
Triggers a one-time build of the static directory.
|
||||
|
||||
```bash
|
||||
yarn format
|
||||
```
|
||||
|
||||
Runs prettier on the entire project directory.
|
||||
|
||||
## Assets
|
||||
|
||||
The `assets/` directory is where you can write JS and SCSS, which get processed
|
||||
into CSS files before being placed in the `static/` directory.
|
||||
|
||||
### Making `scss` changes
|
||||
|
||||
If you make a change to a source `scss` file in `assets/scss`, you will need to make sure that you rebuild the `exampleSite/resources/_gen/assets/` directory to reflect the change in the demo site, else the demo's styles will become stale.
|
||||
|
||||
If you are running `yarn develop`, `hugo` will pick up these changes by default. You can also run `yarn build:example`, which will trigger a one-time rebuild of the example site. From there, commit the updated `resources/_gen` directory to version control.
|
||||
|
||||
## Questions
|
||||
|
||||
If you have any questions feel free to reach out to me directly. Best ways to
|
||||
contact me:
|
||||
|
||||
- Twitter: https://twitter.com/jakewies
|
||||
- Email: jakewiesler@gmail.com
|
||||
20
themes/codex/LICENSE.md
Normal file
@@ -0,0 +1,20 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2020 YOUR_NAME_HERE
|
||||
|
||||
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.
|
||||
253
themes/codex/README.md
Normal file
@@ -0,0 +1,253 @@
|
||||
## Codex
|
||||
|
||||
A minimal blog theme built for [Hugo](https://gohugo.io/) 🍜
|
||||
|
||||

|
||||
|
||||
- An about page 👋🏻 and a blog 📝
|
||||
- Blog posts can be tagged 🏷
|
||||
- Mathematical notations are supported with KaTex 📐
|
||||
- Sass/SCSS for styling ✨
|
||||
- Support for Google Analytics 📈 and Disqus 💬
|
||||
|
||||
### Prerequisites
|
||||
|
||||
Hugo **extended version** (for Sass/SCSS support).
|
||||
|
||||
For macOS users, the extended version is installed by default if you use `homebrew`.
|
||||
|
||||
For Windows users, you can install with `choco`:
|
||||
```
|
||||
choco install hugo-extended -confirm
|
||||
```
|
||||
|
||||
### Getting started
|
||||
|
||||
At the root of your Hugo project, run:
|
||||
|
||||
```bash
|
||||
git submodule add https://github.com/jakewies/hugo-theme-codex.git themes/hugo-theme-codex
|
||||
```
|
||||
|
||||
Next, copy the contents of the [`exampleSite/config.toml`](https://github.com/jakewies/hugo-theme-codex/blob/master/exampleSite/config.toml) to your site's `config.toml`. Make sure to read all the comments, as there a few nuances with Hugo themes that require some changes to that file.
|
||||
|
||||
The most important change you will need to make to the `config.toml` is removing [this line](https://github.com/jakewies/hugo-theme-codex/blob/master/exampleSite/config.toml#L2):
|
||||
|
||||
```
|
||||
themesDir = "../../"
|
||||
```
|
||||
|
||||
It only exists in the example site so that the demo can function properly.
|
||||
|
||||
Finally, run:
|
||||
|
||||
```
|
||||
hugo server -D
|
||||
```
|
||||
|
||||
**Note: If you are seeing a blank page it is probably because you have nothing in your `content/` directory. Read on to fix that.**
|
||||
|
||||
### Configuring the Home Page
|
||||
|
||||
The site's home page can be configured by creating a `content/_index.md` file. This file can use the following frontmatter:
|
||||
|
||||
```md
|
||||
---
|
||||
heading: "Hi, I'm Codex"
|
||||
subheading: "A minimal blog theme for hugo."
|
||||
handle: "hugo-theme-codex"
|
||||
---
|
||||
```
|
||||
|
||||
If you would rather override the about page's layout with your own, you can do so by creating a `layouts/index.html`. You can find the `index.html` file that `hugo-theme-codex` uses [here](https://github.com/jakewies/hugo-theme-codex/blob/master/layouts/index.html).
|
||||
|
||||
### Configuring Social Icons
|
||||
|
||||
Social Icons are optional. To show any of these icons, just provide the value in the `[params]` section of `config.toml`.
|
||||
|
||||
```toml
|
||||
# config.toml
|
||||
|
||||
[params]
|
||||
twitter = "https://twitter.com/GoHugoIO"
|
||||
github = "https://github.com/jakewies/hugo-theme-codex"
|
||||
# ...
|
||||
|
||||
iconOrder = ["Twitter", "GitHub"]
|
||||
```
|
||||
|
||||
If any of these options are given, `hugo-theme-codex` will render the social icon in the footer, using the order specified in `iconOrder`.
|
||||
|
||||
See the contents of the [example site](https://github.com/jakewies/hugo-theme-codex/tree/master/exampleSite) for more details.
|
||||
|
||||
You can also create additional social icons by:
|
||||
1. Adding your own SVGs in `static/svg/`, for example `static/svg/reddit.svg`.
|
||||
2. Modifying your site's config as follows:
|
||||
```toml
|
||||
[params]
|
||||
# ...
|
||||
reddit = "<url to your reddit>"
|
||||
|
||||
iconOrder = ["Reddit"]
|
||||
```
|
||||
|
||||
Make sure that the icon title must match the icon's file name. If the title contains more than one word, say "My Awesome Site",
|
||||
you can use dash "-" for the icon name: `my-awesome-site.svg`.
|
||||
|
||||
### Creating a blog post
|
||||
|
||||
You can create a new blog post page by going to the root of your project and typing:
|
||||
|
||||
```
|
||||
hugo new blog/:blog-post.md
|
||||
```
|
||||
|
||||
Where `:blog-post.md` is the name of the file of your new post.
|
||||
|
||||
This will execute the theme's `blog` archetype to create a new markdown file in `contents/blog/:blog-post.md` with the following frontmatter:
|
||||
|
||||
```md
|
||||
# Default post frontmatter:
|
||||
|
||||
# The title of your post. Default value is generated
|
||||
# From the markdown filename
|
||||
title: "{{ replace .TranslationBaseName "-" " " | title }}"
|
||||
# The date the post was created
|
||||
date: {{ .Date }}
|
||||
# The post filename
|
||||
slug: ""
|
||||
# Post description used for seo
|
||||
description: ""
|
||||
# Post keywords used for seo
|
||||
keywords: []
|
||||
# If true, the blog post will not be included in static build
|
||||
draft: true
|
||||
# Categorize your post with tags
|
||||
tags: []
|
||||
# Uses math typesetting
|
||||
math: false
|
||||
# Includes a table of contents on screens >1024px
|
||||
toc: false
|
||||
```
|
||||
|
||||
The frontmatter above is the default for a new post, but all values can be changed.
|
||||
|
||||
### Configuring Table of Contents in blog posts
|
||||
|
||||
To display post title in Table of Contents in blog posts, set `showPageTitleInTOC`
|
||||
to `true` in the `[params]` section of `config.toml`.
|
||||
|
||||
```toml
|
||||
# config.toml
|
||||
|
||||
[params]
|
||||
# ...
|
||||
showPageTitleInTOC = true
|
||||
```
|
||||
|
||||
### Adding a new section menu
|
||||
|
||||
In your site's `config.toml`, add a new menu definition for say, "photos":
|
||||
```toml
|
||||
# config.toml
|
||||
|
||||
[[menu.main]]
|
||||
identifier = "photos"
|
||||
name = "photos"
|
||||
title = "Photos"
|
||||
url = "/photos"
|
||||
```
|
||||
|
||||
Then, put your posts under "content/photos".
|
||||
|
||||
### Custom styling
|
||||
|
||||
You have two options for custom styling. The first is to create an `assets/scss/custom.scss` in your project and put your custom styling there. For example, the snippet below changes the dot's color on your About page to blue:
|
||||
|
||||
```scss
|
||||
// custom.scss
|
||||
.fancy {
|
||||
color: #1e88e5;
|
||||
}
|
||||
```
|
||||
|
||||
You can even use Hugo variables/params in your custom styles too!
|
||||
|
||||
```scss
|
||||
// custom.scss
|
||||
.fancy {
|
||||
color: {{ .Site.Params.colors.fancy | default "#1e88e5" }}
|
||||
}
|
||||
```
|
||||
|
||||
```toml
|
||||
# config.toml
|
||||
[params.colors]
|
||||
fancy = "#f06292"
|
||||
```
|
||||
|
||||
The second option is to use the supported scss overrides. You can do this by creating an `assets/scss/overrides/scss` file in your project. The following overrides are supported:
|
||||
|
||||
```scss
|
||||
// overrides.scss
|
||||
|
||||
// The primary accent color used throughout the site
|
||||
$primary: ''
|
||||
```
|
||||
|
||||
### Tags
|
||||
|
||||
Right now `hugo-theme-codex` uses the `tags` taxonomy for blog posts. You can view all the blog posts of a given tag by going to `/tags/:tag-name`, where `:tag-name` is the name of your tag.
|
||||
|
||||
### Favicon
|
||||
|
||||
To update favicon of the site, replace the one in `static/favicon.ico` with your own.
|
||||
|
||||
## Contributing
|
||||
|
||||
Check out the [CONTRIBUTORS.md file](https://github.com/jakewies/hugo-theme-codex/blob/master/CONTRIBUTING.md) for more info on how you can contribute!
|
||||
|
||||
## Contributors ✨
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
||||
[](#contributors-)
|
||||
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
||||
|
||||
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<table>
|
||||
<tr>
|
||||
<td align="center"><a href="https://www.jakewiesler.com"><img src="https://avatars1.githubusercontent.com/u/12075916?v=4" width="100px;" alt=""/><br /><sub><b>Jake Wiesler</b></sub></a><br /><a href="https://github.com/jakewies/hugo-theme-codex/commits?author=jakewies" title="Code">💻</a> <a href="#design-jakewies" title="Design">🎨</a> <a href="https://github.com/jakewies/hugo-theme-codex/commits?author=jakewies" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://www.chuxinhuang.com/"><img src="https://avatars2.githubusercontent.com/u/30974572?v=4" width="100px;" alt=""/><br /><sub><b>Chuxin Huang</b></sub></a><br /><a href="https://github.com/jakewies/hugo-theme-codex/commits?author=chuxinh" title="Documentation">📖</a> <a href="https://github.com/jakewies/hugo-theme-codex/commits?author=chuxinh" title="Code">💻</a> <a href="#design-chuxinh" title="Design">🎨</a></td>
|
||||
<td align="center"><a href="https://kentnek.com"><img src="https://avatars1.githubusercontent.com/u/7024160?v=4" width="100px;" alt=""/><br /><sub><b>Kent</b></sub></a><br /><a href="https://github.com/jakewies/hugo-theme-codex/commits?author=kentnek" title="Code">💻</a> <a href="https://github.com/jakewies/hugo-theme-codex/commits?author=kentnek" title="Documentation">📖</a> <a href="#design-kentnek" title="Design">🎨</a></td>
|
||||
<td align="center"><a href="https://github.com/somaniarushi"><img src="https://avatars3.githubusercontent.com/u/54224195?v=4" width="100px;" alt=""/><br /><sub><b>Arushi Somani</b></sub></a><br /><a href="https://github.com/jakewies/hugo-theme-codex/commits?author=somaniarushi" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/xvallspl"><img src="https://avatars0.githubusercontent.com/u/867299?v=4" width="100px;" alt=""/><br /><sub><b>Xavier Valls</b></sub></a><br /><a href="https://github.com/jakewies/hugo-theme-codex/commits?author=xvallspl" title="Documentation">📖</a> <a href="https://github.com/jakewies/hugo-theme-codex/commits?author=xvallspl" title="Code">💻</a> <a href="#design-xvallspl" title="Design">🎨</a></td>
|
||||
<td align="center"><a href="https://github.com/pyvain"><img src="https://avatars3.githubusercontent.com/u/2924494?v=4" width="100px;" alt=""/><br /><sub><b>Pyvain</b></sub></a><br /><a href="https://github.com/jakewies/hugo-theme-codex/commits?author=pyvain" title="Code">💻</a> <a href="https://github.com/jakewies/hugo-theme-codex/commits?author=pyvain" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="http://jlebar.com"><img src="https://avatars1.githubusercontent.com/u/150663?v=4" width="100px;" alt=""/><br /><sub><b>Justin Lebar</b></sub></a><br /><a href="https://github.com/jakewies/hugo-theme-codex/commits?author=jlebar" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://www.aareet.com"><img src="https://avatars1.githubusercontent.com/u/33654?v=4" width="100px;" alt=""/><br /><sub><b>Aareet Shermon</b></sub></a><br /><a href="#design-aareet" title="Design">🎨</a></td>
|
||||
<td align="center"><a href="https://github.com/dgnicholson"><img src="https://avatars1.githubusercontent.com/u/6208288?v=4" width="100px;" alt=""/><br /><sub><b>dgnicholson</b></sub></a><br /><a href="#design-dgnicholson" title="Design">🎨</a> <a href="https://github.com/jakewies/hugo-theme-codex/commits?author=dgnicholson" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://msfjarvis.dev"><img src="https://avatars0.githubusercontent.com/u/13348378?v=4" width="100px;" alt=""/><br /><sub><b>Harsh Shandilya</b></sub></a><br /><a href="https://github.com/jakewies/hugo-theme-codex/commits?author=msfjarvis" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://twitter.com/ProfessorLogout"><img src="https://avatars3.githubusercontent.com/u/13572444?v=4" width="100px;" alt=""/><br /><sub><b>Marco Kamner</b></sub></a><br /><a href="https://github.com/jakewies/hugo-theme-codex/commits?author=ProfessorLogout" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://ewen.io/"><img src="https://avatars3.githubusercontent.com/u/10872821?v=4" width="100px;" alt=""/><br /><sub><b>ewen</b></sub></a><br /><a href="https://github.com/jakewies/hugo-theme-codex/commits?author=ewenme" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/SanchithHegde"><img src="https://avatars2.githubusercontent.com/u/22217505?v=4" width="100px;" alt=""/><br /><sub><b>Sanchith Hegde</b></sub></a><br /><a href="https://github.com/jakewies/hugo-theme-codex/commits?author=SanchithHegde" title="Code">💻</a> <a href="https://github.com/jakewies/hugo-theme-codex/commits?author=SanchithHegde" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://soeren.codes"><img src="https://avatars1.githubusercontent.com/u/5760400?v=4" width="100px;" alt=""/><br /><sub><b>Sören Johanson</b></sub></a><br /><a href="https://github.com/jakewies/hugo-theme-codex/commits?author=CER10TY" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/jdl031"><img src="https://avatars3.githubusercontent.com/u/1720477?v=4" width="100px;" alt=""/><br /><sub><b>James Lloyd</b></sub></a><br /><a href="https://github.com/jakewies/hugo-theme-codex/commits?author=jdl031" title="Code">💻</a></td>
|
||||
<td align="center"><a href="http://wilsonehusin.com"><img src="https://avatars1.githubusercontent.com/u/14004487?v=4" width="100px;" alt=""/><br /><sub><b>Wilson E. Husin</b></sub></a><br /><a href="https://github.com/jakewies/hugo-theme-codex/commits?author=wilsonehusin" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://tommorris.org/"><img src="https://avatars0.githubusercontent.com/u/175?v=4" width="100px;" alt=""/><br /><sub><b>Tom Morris</b></sub></a><br /><a href="https://github.com/jakewies/hugo-theme-codex/commits?author=tommorris" title="Code">💻</a></td>
|
||||
<td align="center"><a href="http://twitter.com/sdil"><img src="https://avatars0.githubusercontent.com/u/461537?v=4" width="100px;" alt=""/><br /><sub><b>Mohamad Fadhil</b></sub></a><br /><a href="https://github.com/jakewies/hugo-theme-codex/commits?author=sdil" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/skvale"><img src="https://avatars0.githubusercontent.com/u/5314713?v=4" width="100px;" alt=""/><br /><sub><b>Sam Kvale</b></sub></a><br /><a href="https://github.com/jakewies/hugo-theme-codex/commits?author=skvale" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- markdownlint-enable -->
|
||||
<!-- prettier-ignore-end -->
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||
11
themes/codex/archetypes/blog.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: "{{ replace .TranslationBaseName "-" " " | title }}"
|
||||
date: {{ .Date }}
|
||||
slug: ""
|
||||
description: ""
|
||||
keywords: []
|
||||
draft: true
|
||||
tags: []
|
||||
math: false
|
||||
toc: false
|
||||
---
|
||||
7
themes/codex/archetypes/default.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: "{{ replace .TranslationBaseName "-" " " | title }}"
|
||||
description: ""
|
||||
date: {{ .Date }}
|
||||
keywords: []
|
||||
draft: true
|
||||
---
|
||||
19
themes/codex/assets/js/index.js
Normal file
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Handles mobile nav
|
||||
*/
|
||||
|
||||
function toggleMobileNavState() {
|
||||
const body = document.querySelector("body");
|
||||
body.classList.toggle("nav--active");
|
||||
}
|
||||
|
||||
/*
|
||||
* Initializes burger functionality
|
||||
*/
|
||||
|
||||
function initBurger() {
|
||||
const burger = document.querySelector(".burger");
|
||||
burger.addEventListener("click", toggleMobileNavState);
|
||||
}
|
||||
|
||||
initBurger();
|
||||
22
themes/codex/assets/scss/_main.scss
Normal file
@@ -0,0 +1,22 @@
|
||||
@import "partials/vars";
|
||||
@import "partials/normalize";
|
||||
@import "partials/reset";
|
||||
@import "partials/typography";
|
||||
@import "partials/nav";
|
||||
@import "partials/social-icons";
|
||||
|
||||
body.nav--active {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
main {
|
||||
padding: 3rem 1.5rem 1rem;
|
||||
|
||||
@media screen and (min-width: $medium) {
|
||||
padding-left: calc(1.5rem + #{$navWidth});
|
||||
}
|
||||
|
||||
@media screen and (max-width: $medium - 1) {
|
||||
padding-top: calc(3rem + #{$burgerContainerHeight});
|
||||
}
|
||||
}
|
||||
0
themes/codex/assets/scss/custom.scss
Normal file
4
themes/codex/assets/scss/overrides.scss
Normal file
@@ -0,0 +1,4 @@
|
||||
// The following variables can be overridden
|
||||
|
||||
// The primary accent color can take any css color property, including hex, named props, rgba etc.
|
||||
// $primary:
|
||||
60
themes/codex/assets/scss/pages/about.scss
Normal file
@@ -0,0 +1,60 @@
|
||||
@import "../main";
|
||||
|
||||
.splash-container {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 14px;
|
||||
|
||||
@media screen and (min-width: $medium) {
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
.splash {
|
||||
h1 {
|
||||
font-size: 3em;
|
||||
line-height: 1;
|
||||
letter-spacing: -0.03em;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 2.25em;
|
||||
font-weight: 500;
|
||||
line-height: 1.25;
|
||||
max-width: 22em;
|
||||
letter-spacing: -0.03em;
|
||||
}
|
||||
}
|
||||
|
||||
.fancy {
|
||||
color: $primary;
|
||||
}
|
||||
|
||||
.handle {
|
||||
display: inline-block;
|
||||
margin-top: 0.275em;
|
||||
color: $grey;
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
|
||||
.writing {
|
||||
text-decoration: none;
|
||||
color: $primary;
|
||||
}
|
||||
|
||||
/* overrides */
|
||||
|
||||
main {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.social-icons {
|
||||
justify-content: flex-start;
|
||||
padding-top: 1rem;
|
||||
margin-left: -0.8rem; // offset to negate icon's padding to align with text above
|
||||
}
|
||||
241
themes/codex/assets/scss/pages/post.scss
Normal file
@@ -0,0 +1,241 @@
|
||||
@import "../main";
|
||||
@import "../partials/github-syntax-highlighting";
|
||||
|
||||
$tocBreakpoint: 1024px;
|
||||
|
||||
/* Aligns ToC content */
|
||||
.flex-wrapper {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.post__container {
|
||||
flex-grow: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.post {
|
||||
width: 100%;
|
||||
max-width: 34rem;
|
||||
margin: 0 auto;
|
||||
|
||||
h2,
|
||||
h3 {
|
||||
position: relative;
|
||||
padding-top: 10px;
|
||||
|
||||
.anchor {
|
||||
top: 0.5rem;
|
||||
text-decoration: none;
|
||||
position: absolute;
|
||||
left: -1rem;
|
||||
color: $grey;
|
||||
font-size: 1.2rem;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.anchor:hover {
|
||||
color: $darkGrey;
|
||||
}
|
||||
}
|
||||
|
||||
blockquote {
|
||||
width: 95%;
|
||||
margin: 0 auto;
|
||||
font-size: 1rem;
|
||||
|
||||
a {
|
||||
color: $darkGrey;
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
width: 100%;
|
||||
max-width: 500px;
|
||||
margin: 0 auto;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
#post__title {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.post__date {
|
||||
color: $grey;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
.post__footer {
|
||||
padding-top: 3rem;
|
||||
}
|
||||
|
||||
.toc-container {
|
||||
position: sticky;
|
||||
align-self: start;
|
||||
top: 3rem;
|
||||
max-width: 350px;
|
||||
|
||||
@media screen and (max-width: $tocBreakpoint) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.toc-post-title {
|
||||
font-size: 0.9rem;
|
||||
margin-bottom: 0.8rem;
|
||||
}
|
||||
|
||||
#TableOfContents {
|
||||
ul {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: #9b9b9b;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
a.active {
|
||||
color: rgb(51, 51, 51);
|
||||
}
|
||||
}
|
||||
|
||||
.tags__list {
|
||||
padding-right: 1.5rem;
|
||||
margin: 1.5rem 0 0;
|
||||
list-style: none;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.tag__item {
|
||||
margin-right: 1rem;
|
||||
display: inline-block;
|
||||
|
||||
&:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.tag__link {
|
||||
display: inline-block;
|
||||
text-decoration: none;
|
||||
padding: 0.2em 0.4em;
|
||||
border-radius: 3px;
|
||||
background: lighten($primary, 41%);
|
||||
color: $primary;
|
||||
font-size: 0.8rem;
|
||||
|
||||
&:hover {
|
||||
background: lighten($primary, 38%);
|
||||
}
|
||||
}
|
||||
|
||||
.gif {
|
||||
margin-top: 1.5rem;
|
||||
|
||||
img {
|
||||
max-width: 375px;
|
||||
}
|
||||
}
|
||||
|
||||
.pagination {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin-top: 1.5rem;
|
||||
|
||||
@media screen and (min-width: 600px) {
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
}
|
||||
|
||||
.pagination__item {
|
||||
text-decoration: none;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
&:nth-child(2) {
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 600px) {
|
||||
width: 275px;
|
||||
padding: 15px;
|
||||
border-radius: 4px;
|
||||
&:first-of-type {
|
||||
padding-right: 15px;
|
||||
}
|
||||
&:last-of-type {
|
||||
margin-top: 0;
|
||||
}
|
||||
&:hover {
|
||||
background-color: #f6f9fc;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.pagination__label {
|
||||
color: $grey;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
.pagination__title {
|
||||
color: $black;
|
||||
font-weight: 700;
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
|
||||
footer {
|
||||
text-align: center;
|
||||
padding: 0 1.5rem;
|
||||
background: $white;
|
||||
|
||||
p {
|
||||
margin-top: 1rem; // reduce margin top due to social icons' padding
|
||||
color: $grey;
|
||||
font-size: 0.65rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* overrides */
|
||||
.post__content {
|
||||
ul {
|
||||
list-style: none;
|
||||
|
||||
li {
|
||||
margin-bottom: 0.5rem;
|
||||
|
||||
&::before {
|
||||
content: "-";
|
||||
color: $darkGrey;
|
||||
position: absolute;
|
||||
margin-left: -15px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.twitter-tweet.twitter-tweet-rendered {
|
||||
margin: 1.5rem auto !important;
|
||||
width: 375px !important;
|
||||
}
|
||||
|
||||
table {
|
||||
max-width: 100%;
|
||||
border-spacing: 0;
|
||||
|
||||
thead {
|
||||
background: $lightGrey;
|
||||
}
|
||||
|
||||
th,
|
||||
td {
|
||||
padding: 0.5em 1em;
|
||||
border: 1px double $greyTableBorder;
|
||||
}
|
||||
}
|
||||
57
themes/codex/assets/scss/pages/posts.scss
Normal file
@@ -0,0 +1,57 @@
|
||||
@import "../main";
|
||||
@import "../partials/post-list";
|
||||
|
||||
.tags__list {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0 0 0 50px;
|
||||
flex-shrink: 0;
|
||||
|
||||
@media screen and (max-width: $medium - 1) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.post__header .tags__list {
|
||||
display: none;
|
||||
padding-left: 0;
|
||||
|
||||
@media screen and (max-width: $medium - 1) {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.tag__item {
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
|
||||
&:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.tag__link {
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
}
|
||||
|
||||
.tag__link {
|
||||
text-decoration: none;
|
||||
color: $grey;
|
||||
font-size: 0.9rem;
|
||||
|
||||
&::before {
|
||||
content: "#";
|
||||
font-size: 0.7rem;
|
||||
padding-right: 1px;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
color: $darkGrey;
|
||||
}
|
||||
}
|
||||
|
||||
/* page overrides */
|
||||
.post-list__container {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
28
themes/codex/assets/scss/pages/tags.scss
Normal file
@@ -0,0 +1,28 @@
|
||||
@import "../main";
|
||||
@import "../partials/post-list";
|
||||
|
||||
.tag__header {
|
||||
align-items: baseline;
|
||||
display: flex;
|
||||
margin: 0 auto 3rem;
|
||||
|
||||
a,
|
||||
.separator {
|
||||
color: $grey;
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.separator {
|
||||
align-self: center;
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
.tag__term {
|
||||
margin: 0;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
55
themes/codex/assets/scss/partials/_burger.scss
Normal file
@@ -0,0 +1,55 @@
|
||||
.burger__container {
|
||||
height: $burgerContainerHeight;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 1.5rem;
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
background: $white;
|
||||
z-index: 2;
|
||||
|
||||
@media screen and (min-width: $medium) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.burger {
|
||||
position: relative;
|
||||
width: $meatWidth;
|
||||
height: $meatWidth;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.burger__meat {
|
||||
position: absolute;
|
||||
width: $meatWidth;
|
||||
height: $meatHeight;
|
||||
background: $black;
|
||||
top: calc(50% - #{$meatHeight} / 2);
|
||||
left: calc(50% - #{$meatWidth} / 2);
|
||||
transition: all 150ms ease-in;
|
||||
}
|
||||
|
||||
.burger__meat--1 {
|
||||
transform: translateY(-10px);
|
||||
}
|
||||
|
||||
.burger__meat--2 {
|
||||
width: calc(#{$meatWidth} - 6px);
|
||||
}
|
||||
|
||||
.burger__meat--3 {
|
||||
transform: translateY(10px);
|
||||
}
|
||||
|
||||
.nav--active .burger__meat--1 {
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
|
||||
.nav--active .burger__meat--2 {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.nav--active .burger__meat--3 {
|
||||
transform: rotate(-45deg);
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
color: #24292e;
|
||||
-moz-tab-size: 4;
|
||||
-o-tab-size: 4;
|
||||
tab-size: 4;
|
||||
|
||||
-webkit-hyphens: none;
|
||||
-moz-hyphens: none;
|
||||
-ms-hyphens: none;
|
||||
hyphens: none;
|
||||
}
|
||||
|
||||
.token.comment,
|
||||
.token.prolog,
|
||||
.token.doctype,
|
||||
.token.cdata,
|
||||
.token.plain-text {
|
||||
color: #6a737d;
|
||||
}
|
||||
|
||||
.token.atrule,
|
||||
.token.attr-value,
|
||||
.token.keyword,
|
||||
.token.operator {
|
||||
color: #d73a49;
|
||||
}
|
||||
|
||||
.token.property,
|
||||
.token.tag,
|
||||
.token.boolean,
|
||||
.token.number,
|
||||
.token.constant,
|
||||
.token.symbol,
|
||||
.token.deleted {
|
||||
color: #22863a;
|
||||
}
|
||||
|
||||
.token.selector,
|
||||
.token.attr-name,
|
||||
.token.string,
|
||||
.token.char,
|
||||
.token.builtin,
|
||||
.token.inserted {
|
||||
color: #032f62;
|
||||
}
|
||||
|
||||
.token.function,
|
||||
.token.class-name {
|
||||
color: #6f42c1;
|
||||
}
|
||||
|
||||
/* language-specific */
|
||||
|
||||
/* JSX */
|
||||
.language-jsx .token.punctuation,
|
||||
.language-jsx .token.tag .token.punctuation,
|
||||
.language-jsx .token.tag .token.script,
|
||||
.language-jsx .token.plain-text {
|
||||
color: #24292e;
|
||||
}
|
||||
|
||||
.language-jsx .token.tag .token.attr-name {
|
||||
color: #6f42c1;
|
||||
}
|
||||
|
||||
.language-jsx .token.tag .token.class-name {
|
||||
color: #005cc5;
|
||||
}
|
||||
|
||||
.language-jsx .token.tag .token.script-punctuation,
|
||||
.language-jsx .token.attr-value .token.punctuation:first-child {
|
||||
color: #d73a49;
|
||||
}
|
||||
|
||||
.language-jsx .token.attr-value {
|
||||
color: #032f62;
|
||||
}
|
||||
|
||||
.language-jsx span[class="comment"] {
|
||||
color: pink;
|
||||
}
|
||||
|
||||
/* HTML */
|
||||
.language-html .token.tag .token.punctuation {
|
||||
color: #24292e;
|
||||
}
|
||||
|
||||
.language-html .token.tag .token.attr-name {
|
||||
color: #6f42c1;
|
||||
}
|
||||
|
||||
.language-html .token.tag .token.attr-value,
|
||||
.language-html
|
||||
.token.tag
|
||||
.token.attr-value
|
||||
.token.punctuation:not(:first-child) {
|
||||
color: #032f62;
|
||||
}
|
||||
|
||||
/* CSS */
|
||||
.language-css .token.selector {
|
||||
color: #6f42c1;
|
||||
}
|
||||
|
||||
.language-css .token.property {
|
||||
color: #005cc5;
|
||||
}
|
||||
82
themes/codex/assets/scss/partials/_nav.scss
Normal file
@@ -0,0 +1,82 @@
|
||||
@import "burger";
|
||||
|
||||
.nav {
|
||||
font-size: 16px;
|
||||
position: fixed;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background: $white;
|
||||
visibility: hidden;
|
||||
z-index: 1;
|
||||
|
||||
@media screen and (min-width: $medium) {
|
||||
display: block;
|
||||
visibility: visible;
|
||||
padding-top: 3em;
|
||||
width: $navWidth;
|
||||
}
|
||||
}
|
||||
|
||||
.nav--active .nav {
|
||||
visibility: visible;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
|
||||
@media screen and (min-width: $medium) {
|
||||
width: $navWidth;
|
||||
}
|
||||
}
|
||||
|
||||
.nav__list {
|
||||
text-align: right;
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 50%;
|
||||
|
||||
@media screen and (min-width: $medium) {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
@media screen and (max-width: $medium - 1) {
|
||||
transform: translateY(-25px);
|
||||
opacity: 0;
|
||||
.nav--active & {
|
||||
transform: translateY(0);
|
||||
opacity: 1;
|
||||
transition: all 500ms ease;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.nav__list li {
|
||||
margin-bottom: 3em;
|
||||
line-height: 1.5em;
|
||||
|
||||
&:last-of-type {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
@media screen and (min-width: $medium) {
|
||||
margin-bottom: 1.75em;
|
||||
}
|
||||
}
|
||||
|
||||
.nav__list a {
|
||||
color: $grey;
|
||||
text-decoration: none;
|
||||
font-size: 2em;
|
||||
|
||||
&.active {
|
||||
color: $black;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
color: $black;
|
||||
}
|
||||
|
||||
@media screen and (min-width: $medium) {
|
||||
font-size: 1em;
|
||||
}
|
||||
}
|
||||
14
themes/codex/assets/scss/partials/_normalize.scss
Normal file
@@ -0,0 +1,14 @@
|
||||
button,
|
||||
button[type="button"],
|
||||
button[type="reset"],
|
||||
button[type="submit"] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
input,
|
||||
input[type="text"],
|
||||
input[type="email"] {
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
appearance: none;
|
||||
}
|
||||
19
themes/codex/assets/scss/partials/_pagination.scss
Normal file
@@ -0,0 +1,19 @@
|
||||
.paginator-container {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.paginator {
|
||||
display: inline-block;
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
margin: 0 1.5rem;
|
||||
background-image: url(/svg/chevron-left.svg);
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.paginator--right {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
34
themes/codex/assets/scss/partials/_post-list.scss
Normal file
@@ -0,0 +1,34 @@
|
||||
.post-list__container {
|
||||
margin: 0 auto;
|
||||
max-width: 1200px;
|
||||
width: 100%;
|
||||
|
||||
@media screen and (min-width: $medium) {
|
||||
padding-left: 50px;
|
||||
}
|
||||
}
|
||||
|
||||
.post-list {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.post {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.post__title {
|
||||
margin-top: 0;
|
||||
font-weight: 500;
|
||||
|
||||
a {
|
||||
color: $black;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
.post__date {
|
||||
color: $grey;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
18
themes/codex/assets/scss/partials/_reset.scss
Normal file
@@ -0,0 +1,18 @@
|
||||
html,
|
||||
body {
|
||||
background-color: $white;
|
||||
color: $black;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
html {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
*,
|
||||
*:before,
|
||||
*:after {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
box-sizing: inherit;
|
||||
}
|
||||
19
themes/codex/assets/scss/partials/_social-icons.scss
Normal file
@@ -0,0 +1,19 @@
|
||||
.social-icons {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.social-icons__link {
|
||||
padding: 0.8rem;
|
||||
|
||||
&:not(:last-child) {
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
.social-icons__icon {
|
||||
width: 1.4rem;
|
||||
height: 1.4rem;
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
}
|
||||
149
themes/codex/assets/scss/partials/_typography.scss
Normal file
@@ -0,0 +1,149 @@
|
||||
$baseFontSize: 16;
|
||||
$fontSizeMobile: 14;
|
||||
$baseLineHeight: 1.5;
|
||||
$scale: 1.414;
|
||||
$leading: $baseLineHeight * 1rem;
|
||||
|
||||
html {
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
|
||||
Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
font-size: 95%;
|
||||
|
||||
@media screen and (min-width: $medium) {
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
@media screen and (min-width: $large) {
|
||||
font-size: 115%;
|
||||
}
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
margin-top: $leading;
|
||||
margin-bottom: 0;
|
||||
line-height: $leading;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 1.5 * $scale * 1rem;
|
||||
line-height: 1.5 * $leading;
|
||||
margin-top: 1.5 * $leading;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: $scale * 1rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: ($scale / 1.2) * 1rem;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: ($scale / 1.44) * 1rem;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: ($scale / 1.728) * 1rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: $leading;
|
||||
margin-bottom: 0;
|
||||
line-height: $leading;
|
||||
}
|
||||
|
||||
ul,
|
||||
ol {
|
||||
padding-left: $leading;
|
||||
margin-top: $leading;
|
||||
margin-bottom: $leading;
|
||||
|
||||
li {
|
||||
line-height: $leading;
|
||||
}
|
||||
|
||||
ul,
|
||||
ol {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
blockquote {
|
||||
&::before {
|
||||
position: absolute;
|
||||
content: "\201C";
|
||||
|
||||
font-size: 6em;
|
||||
font-family: "Roboto", serif;
|
||||
margin-top: 0.1em;
|
||||
margin-left: -0.2em;
|
||||
|
||||
z-index: -1;
|
||||
color: darken($white, 7%);
|
||||
}
|
||||
|
||||
margin-top: $leading;
|
||||
margin-bottom: $leading;
|
||||
line-height: $leading;
|
||||
color: $black;
|
||||
|
||||
cite {
|
||||
&::before {
|
||||
content: "— ";
|
||||
}
|
||||
|
||||
font-style: italic;
|
||||
font-size: 0.95em;
|
||||
color: $darkGrey;
|
||||
}
|
||||
}
|
||||
|
||||
pre {
|
||||
line-height: 1.45;
|
||||
margin-top: $leading;
|
||||
padding: 16px;
|
||||
word-wrap: normal;
|
||||
overflow: auto;
|
||||
background-color: #f6f8fa;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
code {
|
||||
font-size: 85%;
|
||||
font-family: "SFMono-Regular", Consolas, Menlo, monospace;
|
||||
padding: 0.2em 0.4em;
|
||||
margin: 0;
|
||||
background-color: rgba(27, 31, 35, 0.05);
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
pre > code {
|
||||
word-break: normal;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
pre code {
|
||||
display: inline;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
overflow: visible;
|
||||
line-height: inherit;
|
||||
word-wrap: normal;
|
||||
background-color: transparent;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.lead {
|
||||
font-size: $scale * 1rem;
|
||||
}
|
||||
|
||||
abbr[title] {
|
||||
text-decoration: underline double;
|
||||
}
|
||||
21
themes/codex/assets/scss/partials/_vars.scss
Normal file
@@ -0,0 +1,21 @@
|
||||
$navWidth: 100px;
|
||||
$meatWidth: 28px;
|
||||
$meatHeight: 2px;
|
||||
$burgerContainerHeight: 4rem;
|
||||
|
||||
// colors
|
||||
$black: #111;
|
||||
$lightGrey: #f7f7f7;
|
||||
$greyTableBorder: #eeeeee;
|
||||
$grey: #9b9b9b;
|
||||
$darkGrey: #717171;
|
||||
$white: #fff;
|
||||
$primary: #9013fe;
|
||||
|
||||
// screenSizes
|
||||
$medium: 800px;
|
||||
$large: 1400px;
|
||||
|
||||
// import site overrides after variables after
|
||||
// variables have been declared
|
||||
@import "../overrides";
|
||||
73
themes/codex/exampleSite/config.toml
Normal file
@@ -0,0 +1,73 @@
|
||||
# REMOVE THIS
|
||||
themesDir = "../../"
|
||||
|
||||
# DO NOT REMOVE THIS
|
||||
theme = "hugo-theme-codex"
|
||||
|
||||
# Override these settings with your own
|
||||
title = "codex"
|
||||
languageCode = "en-us"
|
||||
baseURL = "https://example.org/"
|
||||
copyright = "© {year}"
|
||||
|
||||
# Add your Disqus shortname here.
|
||||
# disqusShortname = ""
|
||||
|
||||
# Add your Google Analytics identifier: UA-XXXXXXXX-X
|
||||
# googleAnalytics = ""
|
||||
|
||||
# Optional params
|
||||
[params]
|
||||
# Follow the Hugo date/time format reference here:
|
||||
# https://gohugo.io/functions/format/#gos-layout-string
|
||||
dateFormat = "Jan 2 2006"
|
||||
|
||||
# Links to your social accounts, comment/uncomment as needed. Icons will be displayed for those specified.
|
||||
twitter = "https://twitter.com/<your handle>"
|
||||
github = "https://github.com/<your handle>"
|
||||
# email = "mailto:<your email>"
|
||||
# facebook = "https://facebook.com/<your handle>"
|
||||
# gitlab = "https://gitlab.com/<your handle>"
|
||||
# instagram = "https://instagram.com/<your handle>"
|
||||
# linkedin = "<link to your profile>"
|
||||
# youtube = "https://www.youtube.com/channel/<your channel>"
|
||||
|
||||
# Titles for your icons (shown as tooltips), and also their display order.
|
||||
# Currently, these icons are supported:
|
||||
# "Twitter", "GitHub", "Email", "Facebook", "GitLab", "Instagram", "LinkedIn", "YouTube"
|
||||
iconOrder = ["Twitter", "GitHub"]
|
||||
|
||||
# Metadata for Twitter cards, defaults to params.twitter
|
||||
# twitterSite = "@<your handle>"
|
||||
# twitterAuthor = "@<your handle>"
|
||||
|
||||
# Set to true to display page title in table of contents in blog posts.
|
||||
showPageTitleInTOC = false
|
||||
|
||||
# This disables Hugo's default syntax highlighting in favor
|
||||
# of prismjs. If you wish to use Hugo's default syntax highlighting
|
||||
# over prismjs, remove this. You will also need to remove the prismjs
|
||||
# vendor script in layouts/blog/single.html.
|
||||
[markup]
|
||||
[markup.highlight]
|
||||
codeFences = false
|
||||
|
||||
# Set to false to disallow raw HTML in markdown files
|
||||
[markup.goldmark.renderer]
|
||||
unsafe = true
|
||||
|
||||
# Controls the navigation
|
||||
[[menu.main]]
|
||||
identifier = "about"
|
||||
name = "about"
|
||||
title = "About"
|
||||
url = "/"
|
||||
|
||||
[[menu.main]]
|
||||
identifier = "blog"
|
||||
name = "blog"
|
||||
title = "Blog"
|
||||
url = "/blog"
|
||||
|
||||
|
||||
|
||||
5
themes/codex/exampleSite/content/_index.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
heading: "Hi, I'm Codex"
|
||||
subheading: "A minimal blog theme for hugo."
|
||||
handle: "hugo-theme-codex"
|
||||
---
|
||||
23
themes/codex/exampleSite/content/blog/example-post.md
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
title: "Welcome To Codex"
|
||||
date: 2020-06-04T09:19:29-04:00
|
||||
slug: "example-post"
|
||||
description: "This is an example post for hugo-theme-codex."
|
||||
keywords: ["gohugo", "hugo", "go", "blog"]
|
||||
draft: false
|
||||
tags: ["hugo"]
|
||||
math: false
|
||||
toc: true
|
||||
---
|
||||
|
||||
## The standard Lorem Ipsum passage
|
||||
|
||||
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
|
||||
|
||||
## written by Cicero in 45 BC
|
||||
|
||||
"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?"
|
||||
|
||||
## 1914 translation by H. Rackham
|
||||
|
||||
"But I must explain to you how all this mistaken idea of denouncing pleasure and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no annoying consequences, or one who avoids a pain that produces no resultant pleasure?"
|
||||
156
themes/codex/exampleSite/content/blog/markdown-syntax.md
Normal file
@@ -0,0 +1,156 @@
|
||||
---
|
||||
title: "Markdown Syntax Guide"
|
||||
date: 2020-06-05
|
||||
slug: "markdown-syntax-guide"
|
||||
description: "Sample article showcasing basic Markdown syntax and formatting for HTML elements"
|
||||
keywords: ["gohugo", "hugo", "go", "blog"]
|
||||
draft: false
|
||||
tags: ["markdown", "css", "html", "themes"]
|
||||
math: false
|
||||
toc: false
|
||||
---
|
||||
|
||||
This article offers a sample of basic Markdown syntax that can be used in Hugo content files, also it shows whether basic HTML elements are decorated with CSS in a Hugo theme.
|
||||
<!--more-->
|
||||
|
||||
## Headings
|
||||
|
||||
The following HTML `<h1>`—`<h6>` elements represent six levels of section headings. `<h1>` is the highest section level while `<h6>` is the lowest.
|
||||
|
||||
# H1
|
||||
## H2
|
||||
### H3
|
||||
#### H4
|
||||
##### H5
|
||||
###### H6
|
||||
|
||||
## Paragraph
|
||||
|
||||
Xerum, quo qui aut unt expliquam qui dolut labo. Aque venitatiusda cum, voluptionse latur sitiae dolessi aut parist aut dollo enim qui voluptate ma dolestendit peritin re plis aut quas inctum laceat est volestemque commosa as cus endigna tectur, offic to cor sequas etum rerum idem sintibus eiur? Quianimin porecus evelectur, cum que nis nust voloribus ratem aut omnimi, sitatur? Quiatem. Nam, omnis sum am facea corem alique molestrunt et eos evelece arcillit ut aut eos eos nus, sin conecerem erum fuga. Ri oditatquam, ad quibus unda veliamenimin cusam et facea ipsamus es exerum sitate dolores editium rerore eost, temped molorro ratiae volorro te reribus dolorer sperchicium faceata tiustia prat.
|
||||
|
||||
Itatur? Quiatae cullecum rem ent aut odis in re eossequodi nonsequ idebis ne sapicia is sinveli squiatum, core et que aut hariosam ex eat.
|
||||
|
||||
## Blockquotes
|
||||
|
||||
The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a `footer` or `cite` element, and optionally with in-line changes such as annotations and abbreviations.
|
||||
|
||||
#### Blockquote without attribution
|
||||
|
||||
> Tiam, ad mint andaepu dandae nostion secatur sequo quae.
|
||||
> **Note** that you can use *Markdown syntax* within a blockquote.
|
||||
|
||||
#### Blockquote with attribution
|
||||
|
||||
> Simplicity is the ultimate sophistication.
|
||||
> <cite>Leonardo da Vinci[^1]</cite>
|
||||
|
||||
[^1]: The above quote is often attributed to Leonardo da Vinci but there is no concrete evidence to support this.
|
||||
|
||||
|
||||
## Tables
|
||||
|
||||
Tables aren't part of the core Markdown spec, but Hugo supports supports them out-of-the-box.
|
||||
|
||||
Name | Age
|
||||
--------|------
|
||||
Bob | 27
|
||||
Alice | 23
|
||||
|
||||
#### Inline Markdown within tables
|
||||
|
||||
<div style="overflow-x: auto">
|
||||
|
||||
| Inline | Markdown | In | Table |
|
||||
| ---------- | --------- | ----------------- | ---------- |
|
||||
| *italics* | **bold** | ~~strikethrough~~ | `code` |
|
||||
|
||||
</div>
|
||||
|
||||
## Code Blocks
|
||||
|
||||
#### Code block with backticks
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Example HTML5 Document</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>Test</p>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
#### Code block indented with four spaces
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Example HTML5 Document</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>Test</p>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
#### Code block with Hugo's internal highlight shortcode
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Example HTML5 Document</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>Test</p>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
#### Wide code block
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Example HTML5 Document</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
## List Types
|
||||
|
||||
#### Ordered List
|
||||
|
||||
1. First item
|
||||
2. Second item
|
||||
3. Third item
|
||||
|
||||
#### Unordered List
|
||||
|
||||
* List item
|
||||
* Another item
|
||||
* And another item
|
||||
|
||||
#### Nested list
|
||||
|
||||
* Item
|
||||
1. First Sub-item
|
||||
2. Second Sub-item
|
||||
|
||||
## Other Elements — abbr, sub, sup, kbd, mark
|
||||
|
||||
<abbr title="Graphics Interchange Format">GIF</abbr> is a bitmap image format.
|
||||
|
||||
H<sub>2</sub>O
|
||||
|
||||
X<sup>n</sup> + Y<sup>n</sup> = Z<sup>n</sup>
|
||||
|
||||
Press <kbd><kbd>CTRL</kbd>+<kbd>ALT</kbd>+<kbd>Delete</kbd></kbd> to end the session.
|
||||
|
||||
Most <mark>salamanders</mark> are nocturnal, and hunt for insects, worms, and other small creatures.
|
||||
48
themes/codex/exampleSite/content/blog/math-typesetting.md
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: "Math Typesetting"
|
||||
date: 2020-06-05
|
||||
slug: "math-typesetting"
|
||||
description: "A brief guide to setup KaTeX"
|
||||
keywords: ["gohugo", "hugo", "go", "blog"]
|
||||
draft: false
|
||||
tags: ["math"]
|
||||
math: true
|
||||
toc: false
|
||||
---
|
||||
|
||||
Mathematical notation in a Hugo project can be enabled by using third party JavaScript libraries.
|
||||
<!--more-->
|
||||
|
||||
In this example we will be using [KaTeX](https://katex.org/)
|
||||
|
||||
- Create a partial under `/layouts/partials/math.html`
|
||||
- Within this partial reference the [Auto-render Extension](https://katex.org/docs/autorender.html) or host these scripts locally.
|
||||
- Include the partial in your templates like so:
|
||||
|
||||
```
|
||||
{{ if or .Params.math .Site.Params.math }}
|
||||
{{ partial "math.html" . }}
|
||||
{{ end }}
|
||||
```
|
||||
- To enable KaTex globally set the parameter `math` to `true` in a project's configuration
|
||||
- To enable KaTex on a per page basis include the parameter `math: true` in content files.
|
||||
|
||||
**Note:** Use the online reference of [Supported TeX Functions](https://katex.org/docs/supported.html)
|
||||
{{< math.inline >}}
|
||||
{{ if or .Page.Params.math .Site.Params.math }}
|
||||
<!-- KaTeX -->
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.10.1/dist/katex.min.css" integrity="sha384-dbVIfZGuN1Yq7/1Ocstc1lUEm+AT+/rCkibIcC/OmWo5f0EA48Vf8CytHzGrSwbQ" crossorigin="anonymous">
|
||||
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.10.1/dist/katex.min.js" integrity="sha384-2BKqo+exmr9su6dir+qCw08N2ZKRucY4PrGQPPWU1A7FtlCGjmEGFqXCv5nyM5Ij" crossorigin="anonymous"></script>
|
||||
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.10.1/dist/contrib/auto-render.min.js" integrity="sha384-kWPLUVMOks5AQFrykwIup5lo0m3iMkkHrD0uJ4H5cjeGihAutqP0yW0J6dpFiVkI" crossorigin="anonymous" onload="renderMathInElement(document.body);"></script>
|
||||
{{ end }}
|
||||
{{</ math.inline >}}
|
||||
|
||||
### Examples
|
||||
|
||||
Inline math: $$ \varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887… $$
|
||||
|
||||
Block math:
|
||||
|
||||
$$
|
||||
\sigma(t) = \cfrac{1}{1 + e^{-t}}
|
||||
$$
|
||||
32
themes/codex/exampleSite/content/blog/rich-content.md
Normal file
@@ -0,0 +1,32 @@
|
||||
---
|
||||
title: "Rich Content"
|
||||
date: 2020-06-05
|
||||
slug: "rich-text"
|
||||
description: "A brief description of Hugo Shortcodes"
|
||||
keywords: ["gohugo", "hugo", "go", "blog"]
|
||||
draft: false
|
||||
tags: ["shortcodes"]
|
||||
math: false
|
||||
toc: false
|
||||
---
|
||||
|
||||
Hugo ships with several [Built-in Shortcodes](https://gohugo.io/content-management/shortcodes/#use-hugo-s-built-in-shortcodes) for rich content, along with a [Privacy Config](https://gohugo.io/about/hugo-and-gdpr/) and a set of Simple Shortcodes that enable static and no-JS versions of various social media embeds.
|
||||
|
||||
## Instagram Simple Shortcode
|
||||
|
||||
{{< instagram_simple BGvuInzyFAe hidecaption >}}
|
||||
|
||||
|
||||
## YouTube Privacy Enhanced Shortcode
|
||||
|
||||
{{< youtube ZJthWmvUzzc >}}
|
||||
|
||||
|
||||
## Twitter Simple Shortcode
|
||||
|
||||
{{< tweet 1085870671291310081 >}}
|
||||
|
||||
|
||||
## Vimeo Simple Shortcode
|
||||
|
||||
{{< vimeo_simple 48912912 >}}
|
||||
@@ -0,0 +1 @@
|
||||
{"Target":"css/custom.min.e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css","MediaType":"text/css","Data":{"Integrity":"sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="}}
|
||||
@@ -0,0 +1 @@
|
||||
@charset "UTF-8";button,button[type=button],button[type=reset],button[type=submit]{-webkit-appearance:button}input,input[type=text],input[type=email]{-webkit-appearance:none;-moz-appearance:none;appearance:none}html,body{background-color:#fff;color:#111;height:100%}html{box-sizing:border-box}*,*:before,*:after{padding:0;margin:0;box-sizing:inherit}html{font-family:-apple-system,BlinkMacSystemFont,segoe ui,Roboto,Oxygen-Sans,Ubuntu,Cantarell,helvetica neue,sans-serif;-webkit-font-smoothing:antialiased;font-size:95%}@media screen and (min-width:800px){html{font-size:100%}}@media screen and (min-width:1400px){html{font-size:115%}}h1,h2,h3,h4,h5,h6{margin-top:1.5rem;margin-bottom:0;line-height:1.5rem}h1{font-size:2.121rem;line-height:2.25rem;margin-top:2.25rem}h2{font-size:1.414rem}h3{font-size:1.17833333rem}h4{font-size:.98194444rem}h5{font-size:.81828704rem}p{margin-top:1.5rem;margin-bottom:0;line-height:1.5rem}ul,ol{padding-left:1.5rem;margin-top:1.5rem;margin-bottom:1.5rem}ul li,ol li{line-height:1.5rem}ul ul,ul ol,ol ul,ol ol{margin-top:0;margin-bottom:0}blockquote{margin-top:1.5rem;margin-bottom:1.5rem;line-height:1.5rem;color:#111}blockquote::before{position:absolute;content:"\201C";font-size:6em;font-family:roboto,serif;margin-top:.1em;margin-left:-.2em;z-index:-1;color:#ededed}blockquote cite{font-style:italic;font-size:.95em;color:#717171}blockquote cite::before{content:"— "}pre{line-height:1.45;margin-top:1.5rem;padding:16px;word-wrap:normal;overflow:auto;background-color:#f6f8fa;border-radius:3px}code{font-size:85%;font-family:sfmono-regular,Consolas,Menlo,monospace;padding:.2em .4em;margin:0;background-color:rgba(27,31,35,.05);border-radius:3px}pre>code{word-break:normal;white-space:pre}pre code{display:inline;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.lead{font-size:1.414rem}abbr[title]{text-decoration:underline double}.burger__container{height:4rem;display:flex;align-items:center;padding:0 1.5rem;position:fixed;width:100%;background:#fff;z-index:2}@media screen and (min-width:800px){.burger__container{display:none}}.burger{position:relative;width:28px;height:28px;cursor:pointer}.burger__meat{position:absolute;width:28px;height:2px;background:#111;top:calc(50% - 2px/2);left:calc(50% - 28px/2);transition:all 150ms ease-in}.burger__meat--1{transform:translateY(-10px)}.burger__meat--2{width:calc(28px - 6px)}.burger__meat--3{transform:translateY(10px)}.nav--active .burger__meat--1{transform:rotate(45deg)}.nav--active .burger__meat--2{opacity:0}.nav--active .burger__meat--3{transform:rotate(-45deg)}.nav{font-size:16px;position:fixed;display:flex;justify-content:center;align-items:center;background:#fff;visibility:hidden;z-index:1}@media screen and (min-width:800px){.nav{display:block;visibility:visible;padding-top:3em;width:100px}}.nav--active .nav{visibility:visible;height:100%;width:100%}@media screen and (min-width:800px){.nav--active .nav{width:100px}}.nav__list{text-align:right;list-style:none;margin:0;padding:0;width:50%}@media screen and (min-width:800px){.nav__list{width:auto}}@media screen and (max-width:799px){.nav__list{transform:translateY(-25px);opacity:0}.nav--active .nav__list{transform:translateY(0);opacity:1;transition:all 500ms ease}}.nav__list li{margin-bottom:3em;line-height:1.5em}.nav__list li:last-of-type{margin-bottom:0}@media screen and (min-width:800px){.nav__list li{margin-bottom:1.75em}}.nav__list a{color:#9b9b9b;text-decoration:none;font-size:2em}.nav__list a.active{color:#111}.nav__list a:hover{color:#111}@media screen and (min-width:800px){.nav__list a{font-size:1em}}.social-icons{display:flex;justify-content:center}.social-icons__link{padding:.8rem}.social-icons__link:not(:last-child){margin-right:1em}.social-icons__link .social-icons__icon{width:1.4rem;height:1.4rem;background-size:contain;background-repeat:no-repeat}body.nav--active{overflow:hidden}main{padding:3rem 1.5rem 1rem}@media screen and (min-width:800px){main{padding-left:calc(1.5rem + 100px)}}@media screen and (max-width:799px){main{padding-top:calc(3rem + 4rem)}}.splash-container{height:100%;display:flex;justify-content:center;align-items:center;font-size:14px}@media screen and (min-width:800px){.splash-container{font-size:18px}}.splash h1{font-size:3em;line-height:1;letter-spacing:-.03em;margin:0}.splash h2{font-size:2.25em;font-weight:500;line-height:1.25;max-width:22em;letter-spacing:-.03em}.fancy{color:#9013fe}.handle{display:inline-block;margin-top:.275em;color:#9b9b9b;letter-spacing:.5px}.writing{text-decoration:none;color:#9013fe}main{padding-top:0;padding-bottom:0;height:100%}.social-icons{justify-content:flex-start;padding-top:1rem;margin-left:-.8rem}
|
||||
@@ -0,0 +1 @@
|
||||
{"Target":"css/about.min.faa0cdf2d211fbe1d8399c340d898781f94b8e9a9d0e53657a5b8bf7c13e990b.css","MediaType":"text/css","Data":{"Integrity":"sha256-+qDN8tIR++HYOZw0DYmHgflLjpqdDlNleluL98E+mQs="}}
|
||||
@@ -0,0 +1 @@
|
||||
{"Target":"css/post.min.b60e0932fe1c50c3d7c5b4f83ee9e4592363654d0f2abf05bbd0678d5b8a214c.css","MediaType":"text/css","Data":{"Integrity":"sha256-tg4JMv4cUMPXxbT4PunkWSNjZU0PKr8Fu9BnjVuKIUw="}}
|
||||
@@ -0,0 +1 @@
|
||||
{"Target":"css/posts.min.9d00414be708b07c685f180cfce5239fac4e85078a970260044342d7422f18f8.css","MediaType":"text/css","Data":{"Integrity":"sha256-nQBBS+cIsHxoXxgM/OUjn6xOhQeKlwJgBENC10IvGPg="}}
|
||||
@@ -0,0 +1 @@
|
||||
@charset "UTF-8";button,button[type=button],button[type=reset],button[type=submit]{-webkit-appearance:button}input,input[type=text],input[type=email]{-webkit-appearance:none;-moz-appearance:none;appearance:none}html,body{background-color:#fff;color:#111;height:100%}html{box-sizing:border-box}*,*:before,*:after{padding:0;margin:0;box-sizing:inherit}html{font-family:-apple-system,BlinkMacSystemFont,segoe ui,Roboto,Oxygen-Sans,Ubuntu,Cantarell,helvetica neue,sans-serif;-webkit-font-smoothing:antialiased;font-size:95%}@media screen and (min-width:800px){html{font-size:100%}}@media screen and (min-width:1400px){html{font-size:115%}}h1,h2,h3,h4,h5,h6{margin-top:1.5rem;margin-bottom:0;line-height:1.5rem}h1{font-size:2.121rem;line-height:2.25rem;margin-top:2.25rem}h2{font-size:1.414rem}h3{font-size:1.17833333rem}h4{font-size:.98194444rem}h5{font-size:.81828704rem}p{margin-top:1.5rem;margin-bottom:0;line-height:1.5rem}ul,ol{padding-left:1.5rem;margin-top:1.5rem;margin-bottom:1.5rem}ul li,ol li{line-height:1.5rem}ul ul,ul ol,ol ul,ol ol{margin-top:0;margin-bottom:0}blockquote{margin-top:1.5rem;margin-bottom:1.5rem;line-height:1.5rem;color:#111}blockquote::before{position:absolute;content:"\201C";font-size:6em;font-family:roboto,serif;margin-top:.1em;margin-left:-.2em;z-index:-1;color:#ededed}blockquote cite{font-style:italic;font-size:.95em;color:#717171}blockquote cite::before{content:"— "}pre{line-height:1.45;margin-top:1.5rem;padding:16px;word-wrap:normal;overflow:auto;background-color:#f6f8fa;border-radius:3px}code{font-size:85%;font-family:sfmono-regular,Consolas,Menlo,monospace;padding:.2em .4em;margin:0;background-color:rgba(27,31,35,.05);border-radius:3px}pre>code{word-break:normal;white-space:pre}pre code{display:inline;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.lead{font-size:1.414rem}abbr[title]{text-decoration:underline double}.burger__container{height:4rem;display:flex;align-items:center;padding:0 1.5rem;position:fixed;width:100%;background:#fff;z-index:2}@media screen and (min-width:800px){.burger__container{display:none}}.burger{position:relative;width:28px;height:28px;cursor:pointer}.burger__meat{position:absolute;width:28px;height:2px;background:#111;top:calc(50% - 2px/2);left:calc(50% - 28px/2);transition:all 150ms ease-in}.burger__meat--1{transform:translateY(-10px)}.burger__meat--2{width:calc(28px - 6px)}.burger__meat--3{transform:translateY(10px)}.nav--active .burger__meat--1{transform:rotate(45deg)}.nav--active .burger__meat--2{opacity:0}.nav--active .burger__meat--3{transform:rotate(-45deg)}.nav{font-size:16px;position:fixed;display:flex;justify-content:center;align-items:center;background:#fff;visibility:hidden;z-index:1}@media screen and (min-width:800px){.nav{display:block;visibility:visible;padding-top:3em;width:100px}}.nav--active .nav{visibility:visible;height:100%;width:100%}@media screen and (min-width:800px){.nav--active .nav{width:100px}}.nav__list{text-align:right;list-style:none;margin:0;padding:0;width:50%}@media screen and (min-width:800px){.nav__list{width:auto}}@media screen and (max-width:799px){.nav__list{transform:translateY(-25px);opacity:0}.nav--active .nav__list{transform:translateY(0);opacity:1;transition:all 500ms ease}}.nav__list li{margin-bottom:3em;line-height:1.5em}.nav__list li:last-of-type{margin-bottom:0}@media screen and (min-width:800px){.nav__list li{margin-bottom:1.75em}}.nav__list a{color:#9b9b9b;text-decoration:none;font-size:2em}.nav__list a.active{color:#111}.nav__list a:hover{color:#111}@media screen and (min-width:800px){.nav__list a{font-size:1em}}.social-icons{display:flex;justify-content:center}.social-icons__link{padding:.8rem}.social-icons__link:not(:last-child){margin-right:1em}.social-icons__link .social-icons__icon{width:1.4rem;height:1.4rem;background-size:contain;background-repeat:no-repeat}body.nav--active{overflow:hidden}main{padding:3rem 1.5rem 1rem}@media screen and (min-width:800px){main{padding-left:calc(1.5rem + 100px)}}@media screen and (max-width:799px){main{padding-top:calc(3rem + 4rem)}}.post-list__container{margin:0 auto;max-width:1200px;width:100%}@media screen and (min-width:800px){.post-list__container{padding-left:50px}}.post-list{list-style:none;margin:0;padding:0}.post{margin-bottom:1.5rem}.post__title{margin-top:0;font-weight:500}.post__title a{color:#111;text-decoration:none}.post__date{color:#9b9b9b;font-size:.8rem}.tag__header{align-items:baseline;display:flex;margin:0 auto 3rem}.tag__header a,.tag__header .separator{color:#9b9b9b;font-size:1.5rem}.tag__header a{text-decoration:none}.tag__header .separator{align-self:center;margin:0 5px}.tag__header .tag__term{margin:0;font-weight:600}
|
||||
@@ -0,0 +1 @@
|
||||
{"Target":"css/tags.min.366a1c4761304f40d7ab2549c070344a1c8cfbfefc263bb2187aa968d9f66612.css","MediaType":"text/css","Data":{"Integrity":"sha256-NmocR2EwT0DXqyVJwHA0ShyM+/78JjuyGHqpaNn2ZhI="}}
|
||||
BIN
themes/codex/images/screenshot.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
themes/codex/images/tn.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
7
themes/codex/layouts/404.html
Normal file
@@ -0,0 +1,7 @@
|
||||
{{ define "main" }}
|
||||
<article>
|
||||
<h1>
|
||||
This is not the page you were looking for
|
||||
</h1>
|
||||
</article>
|
||||
{{ end }}
|
||||
4
themes/codex/layouts/_default/_markup/render-link.html
Normal file
@@ -0,0 +1,4 @@
|
||||
<a href="{{ .Destination | safeURL }}" {{ with .Title}} title="{{ . }}" {{ end }}
|
||||
{{ if strings.HasPrefix .Destination "mailto" }} target="_blank" {{ end }}
|
||||
{{ if strings.HasPrefix .Destination "http" }} target="_blank" rel="noreferrer noopener" {{ end }}
|
||||
>{{ .Text | safeHTML }}</a>
|
||||
65
themes/codex/layouts/_default/baseof.html
Normal file
@@ -0,0 +1,65 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ .Site.LanguageCode }}">
|
||||
|
||||
<head>
|
||||
<title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} | {{ .Site.Title }}{{ end }}</title>
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta name="language" content="en">
|
||||
<meta name="description" content="{{ if .IsHome}}{{ .Site.Params.Description }}{{ else }}{{.Page.Params.Description}}{{ end }}">
|
||||
<meta name="keywords" content="{{ delimit .Keywords " , " }}">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
|
||||
<!-- Twitter -->
|
||||
{{ if isset .Site.Params "twitter" }}
|
||||
<meta name="twitter:card" content="summary" />
|
||||
<meta name="twitter:title" content="{{ .Title }}" />
|
||||
<meta name="twitter:description" content="{{ if .IsHome }}{{ htmlEscape .Site.Params.description }}{{ else }}{{ htmlEscape .Description }}{{ end }}"/>
|
||||
<meta name="twitter:site" content="{{ .Site.Params.twitterSite | default .Site.Params.twitter }}" />
|
||||
<meta name="twitter:creator" content="{{ .Site.Params.twitterCreator | default .Site.Params.twitter }}" />
|
||||
{{ end }}
|
||||
|
||||
{{ partial "favicon.html" }}
|
||||
|
||||
<!-- Styles -->
|
||||
{{ block "styles" . }} {{ end }} <!-- Get "style_opts" variable from "styles" block -->
|
||||
{{ $base_styles_opts := .Scratch.Get "style_opts" | default (dict "src" "scss/pages/about.scss" "dest" "css/about.css") }}
|
||||
{{ $custom_styles_opts := (dict "src" "scss/custom.scss" "dest" "css/custom.css") }}
|
||||
|
||||
{{ $current_page := . }}
|
||||
|
||||
{{ range (slice $base_styles_opts $custom_styles_opts) }}
|
||||
{{ $style := resources.Get .src | resources.ExecuteAsTemplate .dest $current_page | toCSS | minify | fingerprint }}
|
||||
<link type="text/css" rel="stylesheet" href="{{ $style.RelPermalink }}" integrity="{{ $style.Data.Integrity }}"/>
|
||||
{{ end }}
|
||||
|
||||
{{ range .AlternativeOutputFormats }}
|
||||
{{ printf `<link rel="%s" type="%s+%s" href="%s" title="%s" />` .Rel .MediaType.Type .MediaType.FirstSuffix.Suffix .Permalink $.Site.Title | safeHTML }}
|
||||
{{ end }}
|
||||
{{ block "links" . }} {{ end }}
|
||||
{{ partial "seo-schema.html" .}}
|
||||
|
||||
{{- if not .Site.IsServer -}}
|
||||
{{ template "_internal/google_analytics_async.html" . }}
|
||||
{{- end -}}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{{ partial "burger.html" .}}
|
||||
|
||||
{{ partial "nav.html" .}}
|
||||
|
||||
<main>
|
||||
{{ block "main" . }} {{ end }}
|
||||
</main>
|
||||
|
||||
{{ block "footer" . }} {{ end }}
|
||||
|
||||
{{ $script := resources.Get "js/index.js" | minify | fingerprint }}
|
||||
<script src="{{ $script.RelPermalink }}" integrity="{{ $script.Data.Integrity | safeHTMLAttr }}" crossorigin="anonymous"></script>
|
||||
{{ block "scripts" . }} {{ end }}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
27
themes/codex/layouts/_default/list.html
Normal file
@@ -0,0 +1,27 @@
|
||||
{{ define "styles" }}
|
||||
{{ $.Scratch.Set "style_opts" (dict "src" "scss/pages/posts.scss" "dest" "css/posts.css") }}
|
||||
{{ end }}
|
||||
|
||||
{{ define "main" }}
|
||||
|
||||
{{ $dateFormat := .Site.Params.dateFormat | default "Jan 2 2006" }}
|
||||
|
||||
<div class="post-list__container">
|
||||
<ul class="post-list">
|
||||
{{ range .Pages }}
|
||||
<li class="post">
|
||||
<div class="post__header">
|
||||
<time class="post__date" datetime="{{ .Date }}"
|
||||
>{{ .Date.Format $dateFormat }}</time>
|
||||
<h2 class="post__title">
|
||||
<a href="{{.RelPermalink}}">{{ .Title }}</a>
|
||||
</h2>
|
||||
{{ partial "tags.html" .}}
|
||||
</div>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
{{ partial "browse-by-tag.html" .}}
|
||||
</div>
|
||||
|
||||
{{ end }}
|
||||
51
themes/codex/layouts/_default/single.html
Normal file
@@ -0,0 +1,51 @@
|
||||
{{ define "styles" }}
|
||||
{{ $.Scratch.Set "style_opts" (dict "src" "scss/pages/post.scss" "dest" "css/post.css") }}
|
||||
{{ end }}
|
||||
|
||||
{{ define "main" }}
|
||||
{{ $dateFormat := .Site.Params.dateFormat | default "Jan 2 2006" }}
|
||||
|
||||
<div class="flex-wrapper">
|
||||
<div class="post__container">
|
||||
<div class="post">
|
||||
<header class="post__header">
|
||||
<h1 id="post__title">{{.Title}}</h1>
|
||||
{{ if .Date }}<time datetime="{{ .Date }}" class="post__date">{{ .Date.Format $dateFormat }}</time> {{ end }}
|
||||
</header>
|
||||
<article class="post__content">
|
||||
{{ partial "anchored-headings.html" .Content }}
|
||||
{{ if or .Params.math .Site.Params.math }}
|
||||
{{ partial "math.html" . }}
|
||||
{{ end }}
|
||||
</article>
|
||||
{{ partial "tags.html" .}} {{ partial "post-pagination.html" .}}
|
||||
{{ template "_internal/disqus.html" . }}
|
||||
<footer class="post__footer">
|
||||
{{ partial "social-icons.html" .}}
|
||||
<p>{{ replace .Site.Copyright "{year}" now.Year }}</p>
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
{{ if .Params.toc }}
|
||||
<div class="toc-container">
|
||||
{{ if .Site.Params.showPageTitleInTOC }} <div class="toc-post-title">{{ .Title }}</div> {{ end }}
|
||||
{{ .TableOfContents }}
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
{{ end }}
|
||||
|
||||
{{ define "scripts" }}
|
||||
{{/* Hardcode a specific prismjs version to avoid a redirect on every page load. */}}
|
||||
<script src="https://unpkg.com/prismjs@1.20.0/components/prism-core.min.js"></script>
|
||||
|
||||
{{/* Automatically loads the needed languages to highlight the code blocks. */}}
|
||||
<script src="https://unpkg.com/prismjs@1.20.0/plugins/autoloader/prism-autoloader.min.js"
|
||||
data-autoloader-path="https://unpkg.com/prismjs@1.20.0/components/"></script>
|
||||
|
||||
{{ if .Params.toc }}
|
||||
<script src="/js/table-of-contents.js"></script>
|
||||
{{ end }}
|
||||
|
||||
{{ end }}
|
||||
23
themes/codex/layouts/index.html
Normal file
@@ -0,0 +1,23 @@
|
||||
{{ define "styles" }}
|
||||
{{ $.Scratch.Set "style_opts" (dict "src" "scss/pages/about.scss" "dest" "css/about.css") }}
|
||||
{{ end }}
|
||||
|
||||
{{ define "main" }}
|
||||
|
||||
<div class="splash-container">
|
||||
<div class="splash">
|
||||
|
||||
<h1>{{ .Params.heading }}<span class="fancy">.</span></h1>
|
||||
{{ if isset .Params "handle" }}
|
||||
<span class="handle">@{{ .Params.handle }}</span>
|
||||
{{ end }}
|
||||
<h2>
|
||||
{{ .Params.subheading }}
|
||||
</h2>
|
||||
<!-- Replace MEEEEE -->
|
||||
|
||||
{{ partial "social-icons.html" .}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{ end }}
|
||||
2
themes/codex/layouts/partials/anchored-headings.html
Normal file
@@ -0,0 +1,2 @@
|
||||
<!-- formats .Content headings by adding an anchor -->
|
||||
{{ . | replaceRE "(<h[2-3] id=\"([^\"]+)\".+)(</h[2-9]+>)" "${1}<a class=\"anchor\" href=\"#${2}\">#</a>${3}" | safeHTML }}
|
||||
7
themes/codex/layouts/partials/browse-by-tag.html
Normal file
@@ -0,0 +1,7 @@
|
||||
<ul class="tags__list">
|
||||
{{ range $tag, $value := $.Site.Taxonomies.tags }}
|
||||
<li class="tag__item">
|
||||
<a class="tag__link" href="{{ "/tags/" | relLangURL}}{{ $tag | urlize }}/">{{ $tag | urlize }} ({{ len $value }})</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
7
themes/codex/layouts/partials/burger.html
Normal file
@@ -0,0 +1,7 @@
|
||||
<div class="burger__container">
|
||||
<div class="burger" aria-controls="navigation" aria-label="Menu">
|
||||
<div class="burger__meat burger__meat--1"></div>
|
||||
<div class="burger__meat burger__meat--2"></div>
|
||||
<div class="burger__meat burger__meat--3"></div>
|
||||
</div>
|
||||
</div>
|
||||
1
themes/codex/layouts/partials/favicon.html
Normal file
@@ -0,0 +1 @@
|
||||
<link rel="shortcut icon" type="image/png" href="/favicon.ico" />
|
||||
11
themes/codex/layouts/partials/math.html
Normal file
@@ -0,0 +1,11 @@
|
||||
<!-- layouts/partials/math.html -->
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_SVG"></script>
|
||||
<script type="text/x-mathjax-config">
|
||||
MathJax.Hub.Config({
|
||||
showMathMenu: false, //disables context menu
|
||||
tex2jax: {
|
||||
inlineMath: [ ['$','$'], ['\\(','\\)'] ]
|
||||
}
|
||||
});
|
||||
</script>
|
||||
11
themes/codex/layouts/partials/nav.html
Normal file
@@ -0,0 +1,11 @@
|
||||
<nav class="nav" id="navigation">
|
||||
<ul class="nav__list">
|
||||
{{ $currentPage := . }}
|
||||
{{ range .Site.Menus.main }}
|
||||
<li>
|
||||
<a {{ if or ($currentPage.IsMenuCurrent "main" .) (eq $currentPage.Section .Identifier) }} class="active"
|
||||
{{end}} href="{{ .URL }}">{{ .Name }}</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</nav>
|
||||
7
themes/codex/layouts/partials/pagination.html
Normal file
@@ -0,0 +1,7 @@
|
||||
<div class="paginator-container">
|
||||
{{ if .Paginator.HasPrev }}
|
||||
<a class="paginator paginator--left" href="{{ .Paginator.Prev.URL }}"></a>
|
||||
{{ end }} {{ if .Paginator.HasNext }}
|
||||
<a class="paginator paginator--right" href="{{ .Paginator.Next.URL }}"></a>
|
||||
{{ end }}
|
||||
</div>
|
||||
15
themes/codex/layouts/partials/post-pagination.html
Normal file
@@ -0,0 +1,15 @@
|
||||
<div class="pagination">
|
||||
{{if .PrevInSection}}
|
||||
<a class="pagination__item" href="{{.PrevInSection.Permalink}}">
|
||||
<span class="pagination__label">Previous Post</span>
|
||||
<span class="pagination__title">{{.PrevInSection.Title}}</span>
|
||||
</a>
|
||||
{{end}}
|
||||
|
||||
{{if .NextInSection}}
|
||||
<a class="pagination__item" href="{{.NextInSection.Permalink}}">
|
||||
<span class="pagination__label">Next Post</span>
|
||||
<span class="pagination__title" >{{.NextInSection.Title}}</span>
|
||||
</a>
|
||||
{{end}}
|
||||
</div>
|
||||
42
themes/codex/layouts/partials/seo-schema.html
Normal file
@@ -0,0 +1,42 @@
|
||||
|
||||
<!-- JSON-LD -->
|
||||
<script type="application/ld+json">
|
||||
{{ if and (.IsPage) (eq .Section "blog") }}
|
||||
{
|
||||
"@context" : "http://schema.org",
|
||||
"@type" : "BlogPosting",
|
||||
"mainEntityOfPage": {
|
||||
"@type": "WebPage",
|
||||
"@id": "{{ .Site.BaseURL }}"
|
||||
},
|
||||
"articleSection" : "{{ .Section }}",
|
||||
"name" : "{{ .Title }}",
|
||||
"headline" : "{{ .Title }}",
|
||||
"description" : "{{ .Description }}",
|
||||
"inLanguage" : "en-US",
|
||||
"author" : "{{ .Site.Params.name }}",
|
||||
"creator" : "{{ .Site.Params.name }}",
|
||||
"publisher": "{{ .Site.Params.name }}",
|
||||
"accountablePerson" : "{{ .Site.Params.name }}",
|
||||
"copyrightHolder" : "{{ .Site.Params.name }}",
|
||||
"copyrightYear" : "{{ .Date.Format "2006" }}",
|
||||
"datePublished": "{{ .Date }}",
|
||||
"dateModified" : "{{ .Date }}",
|
||||
"url" : "{{ .Permalink }}",
|
||||
"wordCount" : "{{ .WordCount }}",
|
||||
"keywords" : [{{ if isset .Params "keywords" }}{{ range .Params.keywords }}"{{ . }}", {{ end }}{{ end }}"Blog"]
|
||||
}
|
||||
{{ else }}
|
||||
{
|
||||
"@context": "http://schema.org",
|
||||
"@type": "WebSite",
|
||||
"url": "{{ .Permalink }}",
|
||||
"name": "{{ .Title }}",
|
||||
"author": {
|
||||
"@type": "Person",
|
||||
"name": "{{ .Site.Params.name }}"
|
||||
},
|
||||
"description": "{{ if .IsHome }}{{ htmlEscape .Site.Params.description }}{{ else }}{{ htmlEscape .Description }}{{ end }}"
|
||||
}
|
||||
{{ end }}
|
||||
</script>
|
||||
15
themes/codex/layouts/partials/social-icons.html
Normal file
@@ -0,0 +1,15 @@
|
||||
{{ $currentPage := . }}
|
||||
{{ $icons := .Site.Params.iconOrder | default (slice "Twitter" "GitHub" "Email" "Facebook" "GitLab" "Instagram" "LinkedIn" "YouTube") }}
|
||||
|
||||
<div class="social-icons">
|
||||
{{ range $icons }}
|
||||
{{ $icon := anchorize . }}
|
||||
{{ if isset $currentPage.Site.Params $icon }}
|
||||
<a class="social-icons__link" rel="me" title="{{ . }}"
|
||||
href="{{ index $currentPage.Site.Params $icon }}"
|
||||
target="_blank" rel="noopener">
|
||||
<div class="social-icons__icon" style="background-image: url('{{print "svg/" $icon ".svg" | absURL}}')"></div>
|
||||
</a>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
12
themes/codex/layouts/partials/tags.html
Normal file
@@ -0,0 +1,12 @@
|
||||
{{ $taxo := "tags" }}
|
||||
{{ with .Param $taxo }}
|
||||
<ul class="tags__list">
|
||||
{{ range $index, $tag := . }}
|
||||
{{ with $.Site.GetPage (printf "/%s/%s" $taxo $tag) -}}
|
||||
<li class="tag__item">
|
||||
<a class="tag__link" href="{{ .Permalink }}">{{ $tag | urlize }}</a>
|
||||
</li>
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
</ul>
|
||||
{{ end }}
|
||||
26
themes/codex/layouts/taxonomy/tag.html
Normal file
@@ -0,0 +1,26 @@
|
||||
{{ define "styles" }}
|
||||
{{ $.Scratch.Set "style_opts" (dict "src" "scss/pages/tags.scss" "dest" "css/tags.css") }}
|
||||
{{ end }}
|
||||
|
||||
{{ define "main" }}
|
||||
{{ $dateFormat := .Site.Params.dateFormat | default "Jan 2 2006" }}
|
||||
|
||||
<div class="post-list__container">
|
||||
<div class="tag__header">
|
||||
<a href="/posts/">All posts</a><span class="separator">/</span>
|
||||
<h1 class="tag__term">{{ .Title }}</h1>
|
||||
</div>
|
||||
<ul class="post-list">
|
||||
{{ range .Data.Pages }}
|
||||
<li class="post">
|
||||
<div class="post__header">
|
||||
<time class="post__date" datetime="{{ .Date }}">{{ .Date.Format $dateFormat }}</time>
|
||||
<h2 class="post__title">
|
||||
<a href="{{.RelPermalink}}">{{ .Title }}</a>
|
||||
</h2>
|
||||
</div>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
{{ end }}
|
||||
36
themes/codex/package.json
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"name": "hugo-theme-codex",
|
||||
"version": "1.5.0",
|
||||
"author": "Jake Wiesler",
|
||||
"description": "A minimal blog theme for Hugo",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"develop": "hugo server -s ./exampleSite/",
|
||||
"build:example": "hugo -s ./exampleSite/",
|
||||
"format": "prettier ./ --write"
|
||||
},
|
||||
"husky": {
|
||||
"hooks": {
|
||||
"pre-commit": "lint-staged"
|
||||
}
|
||||
},
|
||||
"devDependencies": {
|
||||
"husky": "^4.2.5",
|
||||
"lint-staged": ">=10",
|
||||
"prettier": "^2.0.5"
|
||||
},
|
||||
"browserslist": [
|
||||
"last 2 version",
|
||||
"> 2%"
|
||||
],
|
||||
"homepage": "https://github.com/jakewies/hugo-theme-codex",
|
||||
"bugs": "https://github.com/jakewies/hugo-theme-codex/issues",
|
||||
"keywords": [
|
||||
"hugo",
|
||||
"blog",
|
||||
"go"
|
||||
],
|
||||
"lint-staged": {
|
||||
"*.{js,css,scss}": "prettier --write"
|
||||
}
|
||||
}
|
||||
13
themes/codex/prettier.config.js
Normal file
@@ -0,0 +1,13 @@
|
||||
module.exports = {
|
||||
arrowParens: "avoid",
|
||||
bracketSpacing: false,
|
||||
endOfLine: "lf",
|
||||
htmlWhitespaceSensitivity: "css",
|
||||
printWidth: 80,
|
||||
proseWrap: "always",
|
||||
semi: true,
|
||||
singleQuote: false,
|
||||
tabWidth: 2,
|
||||
trailingComma: "all",
|
||||
useTabs: false,
|
||||
};
|
||||
BIN
themes/codex/static/favicon.ico
Normal file
|
After Width: | Height: | Size: 318 B |
17
themes/codex/static/js/table-of-contents.js
Normal file
@@ -0,0 +1,17 @@
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
const observer = new IntersectionObserver(entries => {
|
||||
entries.forEach(entry => {
|
||||
const id = entry.target.getAttribute('id');
|
||||
if (entry.intersectionRatio > 0) {
|
||||
document.querySelector(`#TableOfContents ul li a[href="#${id}"]`).classList.add('active');
|
||||
} else {
|
||||
document.querySelector(`#TableOfContents ul li a[href="#${id}"]`).classList.remove('active');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Track all headers that have an `id` applied
|
||||
document.querySelectorAll('article h3[id], article h2[id]').forEach((section) => {
|
||||
observer.observe(section);
|
||||
});
|
||||
});
|
||||
1
themes/codex/static/svg/chevron-left.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-left"><path d="M15 18l-6-6 6-6"/></svg>
|
||||
|
After Width: | Height: | Size: 251 B |
1
themes/codex/static/svg/email.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-mail"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg>
|
||||
|
After Width: | Height: | Size: 354 B |
1
themes/codex/static/svg/facebook.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-facebook"><path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"></path></svg>
|
||||
|
After Width: | Height: | Size: 303 B |
1
themes/codex/static/svg/github.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-github"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"/></svg>
|
||||
|
After Width: | Height: | Size: 521 B |
1
themes/codex/static/svg/gitlab.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-gitlab"><path d="M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z"></path></svg>
|
||||
|
After Width: | Height: | Size: 490 B |
1
themes/codex/static/svg/instagram.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-instagram"><rect x="2" y="2" width="20" height="20" rx="5" ry="5"></rect><path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"></path><line x1="17.5" y1="6.5" x2="17.51" y2="6.5"></line></svg>
|
||||
|
After Width: | Height: | Size: 400 B |
1
themes/codex/static/svg/linkedin.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-linkedin"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect x="2" y="9" width="4" height="12"></rect><circle cx="4" cy="4" r="2"></circle></svg>
|
||||
|
After Width: | Height: | Size: 400 B |
1
themes/codex/static/svg/twitter.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-twitter"><path d="M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z"/></svg>
|
||||
|
After Width: | Height: | Size: 402 B |
1
themes/codex/static/svg/youtube.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-youtube"><path d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z"></path><polygon points="9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02"></polygon></svg>
|
||||
|
After Width: | Height: | Size: 565 B |
15
themes/codex/theme.toml
Normal file
@@ -0,0 +1,15 @@
|
||||
# theme.toml template for a Hugo theme
|
||||
# See https://github.com/gohugoio/hugoThemes#themetoml for an example
|
||||
|
||||
name = "Codex"
|
||||
license = "MIT"
|
||||
licenselink = "https://github.com/jakewies/hugo-theme-codex/blob/master/LICENSE.md"
|
||||
description = "A minimal blog theme for hugo"
|
||||
homepage = "https://github.com/jakewies/hugo-theme-codex"
|
||||
tags = ["website", "starter", "blog"]
|
||||
features = ["blog"]
|
||||
min_version = "0.72.0"
|
||||
|
||||
[author]
|
||||
name = "Jake Wiesler"
|
||||
homepage = "https://jakewiesler.com"
|
||||
860
themes/codex/yarn.lock
Normal file
@@ -0,0 +1,860 @@
|
||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@babel/code-frame@^7.0.0":
|
||||
version "7.10.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.3.tgz#324bcfd8d35cd3d47dae18cde63d752086435e9a"
|
||||
integrity sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==
|
||||
dependencies:
|
||||
"@babel/highlight" "^7.10.3"
|
||||
|
||||
"@babel/helper-validator-identifier@^7.10.3":
|
||||
version "7.10.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz#60d9847f98c4cea1b279e005fdb7c28be5412d15"
|
||||
integrity sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==
|
||||
|
||||
"@babel/highlight@^7.10.3":
|
||||
version "7.10.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.3.tgz#c633bb34adf07c5c13156692f5922c81ec53f28d"
|
||||
integrity sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==
|
||||
dependencies:
|
||||
"@babel/helper-validator-identifier" "^7.10.3"
|
||||
chalk "^2.0.0"
|
||||
js-tokens "^4.0.0"
|
||||
|
||||
"@types/color-name@^1.1.1":
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
|
||||
integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
|
||||
|
||||
"@types/minimatch@^3.0.3":
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
|
||||
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
|
||||
|
||||
"@types/parse-json@^4.0.0":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
|
||||
integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
|
||||
|
||||
aggregate-error@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0"
|
||||
integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==
|
||||
dependencies:
|
||||
clean-stack "^2.0.0"
|
||||
indent-string "^4.0.0"
|
||||
|
||||
ansi-colors@^3.2.1:
|
||||
version "3.2.4"
|
||||
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
|
||||
integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
|
||||
|
||||
ansi-escapes@^4.3.0:
|
||||
version "4.3.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
|
||||
integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==
|
||||
dependencies:
|
||||
type-fest "^0.11.0"
|
||||
|
||||
ansi-regex@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
|
||||
integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
|
||||
|
||||
ansi-styles@^3.2.1:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
||||
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
|
||||
dependencies:
|
||||
color-convert "^1.9.0"
|
||||
|
||||
ansi-styles@^4.0.0, ansi-styles@^4.1.0:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359"
|
||||
integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
|
||||
dependencies:
|
||||
"@types/color-name" "^1.1.1"
|
||||
color-convert "^2.0.1"
|
||||
|
||||
array-differ@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b"
|
||||
integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==
|
||||
|
||||
array-union@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
|
||||
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
|
||||
|
||||
arrify@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
|
||||
integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
|
||||
|
||||
astral-regex@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
|
||||
integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
|
||||
|
||||
balanced-match@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
||||
|
||||
brace-expansion@^1.1.7:
|
||||
version "1.1.11"
|
||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
|
||||
dependencies:
|
||||
balanced-match "^1.0.0"
|
||||
concat-map "0.0.1"
|
||||
|
||||
braces@^3.0.1:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
|
||||
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
|
||||
dependencies:
|
||||
fill-range "^7.0.1"
|
||||
|
||||
callsites@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
|
||||
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
|
||||
|
||||
chalk@^2.0.0, chalk@^2.4.2:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
|
||||
dependencies:
|
||||
ansi-styles "^3.2.1"
|
||||
escape-string-regexp "^1.0.5"
|
||||
supports-color "^5.3.0"
|
||||
|
||||
chalk@^4.0.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
|
||||
integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
|
||||
dependencies:
|
||||
ansi-styles "^4.1.0"
|
||||
supports-color "^7.1.0"
|
||||
|
||||
ci-info@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
|
||||
integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
|
||||
|
||||
clean-stack@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
|
||||
integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
|
||||
|
||||
cli-cursor@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
|
||||
integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
|
||||
dependencies:
|
||||
restore-cursor "^3.1.0"
|
||||
|
||||
cli-truncate@2.1.0, cli-truncate@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
|
||||
integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
|
||||
dependencies:
|
||||
slice-ansi "^3.0.0"
|
||||
string-width "^4.2.0"
|
||||
|
||||
color-convert@^1.9.0:
|
||||
version "1.9.3"
|
||||
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
||||
integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
|
||||
dependencies:
|
||||
color-name "1.1.3"
|
||||
|
||||
color-convert@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
|
||||
integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
|
||||
dependencies:
|
||||
color-name "~1.1.4"
|
||||
|
||||
color-name@1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
|
||||
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
|
||||
|
||||
color-name@~1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
|
||||
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||
|
||||
commander@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
|
||||
integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
|
||||
|
||||
compare-versions@^3.6.0:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62"
|
||||
integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==
|
||||
|
||||
concat-map@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
||||
|
||||
cosmiconfig@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
|
||||
integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==
|
||||
dependencies:
|
||||
"@types/parse-json" "^4.0.0"
|
||||
import-fresh "^3.1.0"
|
||||
parse-json "^5.0.0"
|
||||
path-type "^4.0.0"
|
||||
yaml "^1.7.2"
|
||||
|
||||
cross-spawn@^7.0.0:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
|
||||
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
|
||||
dependencies:
|
||||
path-key "^3.1.0"
|
||||
shebang-command "^2.0.0"
|
||||
which "^2.0.1"
|
||||
|
||||
debug@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
|
||||
integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
|
||||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
dedent@^0.7.0:
|
||||
version "0.7.0"
|
||||
resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
|
||||
integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
|
||||
|
||||
emoji-regex@^8.0.0:
|
||||
version "8.0.0"
|
||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
|
||||
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
|
||||
|
||||
end-of-stream@^1.1.0:
|
||||
version "1.4.4"
|
||||
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
|
||||
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
|
||||
dependencies:
|
||||
once "^1.4.0"
|
||||
|
||||
enquirer@^2.3.5:
|
||||
version "2.3.5"
|
||||
resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.5.tgz#3ab2b838df0a9d8ab9e7dff235b0e8712ef92381"
|
||||
integrity sha512-BNT1C08P9XD0vNg3J475yIUG+mVdp9T6towYFHUv897X0KoHBjB1shyrNmhmtHWKP17iSWgo7Gqh7BBuzLZMSA==
|
||||
dependencies:
|
||||
ansi-colors "^3.2.1"
|
||||
|
||||
error-ex@^1.3.1:
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
|
||||
integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
|
||||
dependencies:
|
||||
is-arrayish "^0.2.1"
|
||||
|
||||
escape-string-regexp@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
||||
|
||||
execa@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/execa/-/execa-2.1.0.tgz#e5d3ecd837d2a60ec50f3da78fd39767747bbe99"
|
||||
integrity sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==
|
||||
dependencies:
|
||||
cross-spawn "^7.0.0"
|
||||
get-stream "^5.0.0"
|
||||
is-stream "^2.0.0"
|
||||
merge-stream "^2.0.0"
|
||||
npm-run-path "^3.0.0"
|
||||
onetime "^5.1.0"
|
||||
p-finally "^2.0.0"
|
||||
signal-exit "^3.0.2"
|
||||
strip-final-newline "^2.0.0"
|
||||
|
||||
execa@^4.0.1:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.2.tgz#ad87fb7b2d9d564f70d2b62d511bee41d5cbb240"
|
||||
integrity sha512-QI2zLa6CjGWdiQsmSkZoGtDx2N+cQIGb3yNolGTdjSQzydzLgYYf8LRuagp7S7fPimjcrzUDSUFd/MgzELMi4Q==
|
||||
dependencies:
|
||||
cross-spawn "^7.0.0"
|
||||
get-stream "^5.0.0"
|
||||
human-signals "^1.1.1"
|
||||
is-stream "^2.0.0"
|
||||
merge-stream "^2.0.0"
|
||||
npm-run-path "^4.0.0"
|
||||
onetime "^5.1.0"
|
||||
signal-exit "^3.0.2"
|
||||
strip-final-newline "^2.0.0"
|
||||
|
||||
figures@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
|
||||
integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
|
||||
dependencies:
|
||||
escape-string-regexp "^1.0.5"
|
||||
|
||||
fill-range@^7.0.1:
|
||||
version "7.0.1"
|
||||
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
|
||||
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
|
||||
dependencies:
|
||||
to-regex-range "^5.0.1"
|
||||
|
||||
find-up@^4.0.0, find-up@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
|
||||
integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
|
||||
dependencies:
|
||||
locate-path "^5.0.0"
|
||||
path-exists "^4.0.0"
|
||||
|
||||
find-versions@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e"
|
||||
integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==
|
||||
dependencies:
|
||||
semver-regex "^2.0.0"
|
||||
|
||||
get-own-enumerable-property-symbols@^3.0.0:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
|
||||
integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
|
||||
|
||||
get-stream@^5.0.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9"
|
||||
integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==
|
||||
dependencies:
|
||||
pump "^3.0.0"
|
||||
|
||||
has-flag@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
||||
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
|
||||
|
||||
has-flag@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
|
||||
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
|
||||
|
||||
human-signals@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
|
||||
integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
|
||||
|
||||
husky@^4.2.5:
|
||||
version "4.2.5"
|
||||
resolved "https://registry.yarnpkg.com/husky/-/husky-4.2.5.tgz#2b4f7622673a71579f901d9885ed448394b5fa36"
|
||||
integrity sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ==
|
||||
dependencies:
|
||||
chalk "^4.0.0"
|
||||
ci-info "^2.0.0"
|
||||
compare-versions "^3.6.0"
|
||||
cosmiconfig "^6.0.0"
|
||||
find-versions "^3.2.0"
|
||||
opencollective-postinstall "^2.0.2"
|
||||
pkg-dir "^4.2.0"
|
||||
please-upgrade-node "^3.2.0"
|
||||
slash "^3.0.0"
|
||||
which-pm-runs "^1.0.0"
|
||||
|
||||
ignore@^5.1.4:
|
||||
version "5.1.8"
|
||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
|
||||
integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
|
||||
|
||||
import-fresh@^3.1.0:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
|
||||
integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
|
||||
dependencies:
|
||||
parent-module "^1.0.0"
|
||||
resolve-from "^4.0.0"
|
||||
|
||||
indent-string@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
|
||||
integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
|
||||
|
||||
is-arrayish@^0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
|
||||
integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
|
||||
|
||||
is-fullwidth-code-point@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
|
||||
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
|
||||
|
||||
is-number@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
|
||||
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
|
||||
|
||||
is-obj@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
|
||||
integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
|
||||
|
||||
is-regexp@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
|
||||
integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
|
||||
|
||||
is-stream@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
|
||||
integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
|
||||
|
||||
isexe@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
|
||||
|
||||
js-tokens@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
||||
|
||||
json-parse-better-errors@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
|
||||
integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
|
||||
|
||||
lines-and-columns@^1.1.6:
|
||||
version "1.1.6"
|
||||
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
|
||||
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
|
||||
|
||||
lint-staged@>=10:
|
||||
version "10.2.11"
|
||||
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.2.11.tgz#713c80877f2dc8b609b05bc59020234e766c9720"
|
||||
integrity sha512-LRRrSogzbixYaZItE2APaS4l2eJMjjf5MbclRZpLJtcQJShcvUzKXsNeZgsLIZ0H0+fg2tL4B59fU9wHIHtFIA==
|
||||
dependencies:
|
||||
chalk "^4.0.0"
|
||||
cli-truncate "2.1.0"
|
||||
commander "^5.1.0"
|
||||
cosmiconfig "^6.0.0"
|
||||
debug "^4.1.1"
|
||||
dedent "^0.7.0"
|
||||
enquirer "^2.3.5"
|
||||
execa "^4.0.1"
|
||||
listr2 "^2.1.0"
|
||||
log-symbols "^4.0.0"
|
||||
micromatch "^4.0.2"
|
||||
normalize-path "^3.0.0"
|
||||
please-upgrade-node "^3.2.0"
|
||||
string-argv "0.3.1"
|
||||
stringify-object "^3.3.0"
|
||||
|
||||
listr2@^2.1.0:
|
||||
version "2.1.8"
|
||||
resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.1.8.tgz#8af7ebc70cdbe866ddbb6c80909142bd45758f1f"
|
||||
integrity sha512-Op+hheiChfAphkJ5qUxZtHgyjlX9iNnAeFS/S134xw7mVSg0YVrQo1IY4/K+ElY6XgOPg2Ij4z07urUXR+YEew==
|
||||
dependencies:
|
||||
chalk "^4.0.0"
|
||||
cli-truncate "^2.1.0"
|
||||
figures "^3.2.0"
|
||||
indent-string "^4.0.0"
|
||||
log-update "^4.0.0"
|
||||
p-map "^4.0.0"
|
||||
rxjs "^6.5.5"
|
||||
through "^2.3.8"
|
||||
|
||||
locate-path@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
|
||||
integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
|
||||
dependencies:
|
||||
p-locate "^4.1.0"
|
||||
|
||||
log-symbols@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920"
|
||||
integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==
|
||||
dependencies:
|
||||
chalk "^4.0.0"
|
||||
|
||||
log-update@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1"
|
||||
integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==
|
||||
dependencies:
|
||||
ansi-escapes "^4.3.0"
|
||||
cli-cursor "^3.1.0"
|
||||
slice-ansi "^4.0.0"
|
||||
wrap-ansi "^6.2.0"
|
||||
|
||||
merge-stream@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
|
||||
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
|
||||
|
||||
micromatch@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
|
||||
integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
|
||||
dependencies:
|
||||
braces "^3.0.1"
|
||||
picomatch "^2.0.5"
|
||||
|
||||
mimic-fn@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
|
||||
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
|
||||
|
||||
minimatch@^3.0.4:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
|
||||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
mri@^1.1.4:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.5.tgz#ce21dba2c69f74a9b7cf8a1ec62307e089e223e0"
|
||||
integrity sha512-d2RKzMD4JNyHMbnbWnznPaa8vbdlq/4pNZ3IgdaGrVbBhebBsGUUE/6qorTMYNS6TwuH3ilfOlD2bf4Igh8CKg==
|
||||
|
||||
ms@^2.1.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
|
||||
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
||||
|
||||
multimatch@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3"
|
||||
integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==
|
||||
dependencies:
|
||||
"@types/minimatch" "^3.0.3"
|
||||
array-differ "^3.0.0"
|
||||
array-union "^2.1.0"
|
||||
arrify "^2.0.1"
|
||||
minimatch "^3.0.4"
|
||||
|
||||
normalize-path@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
|
||||
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
|
||||
|
||||
npm-run-path@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-3.1.0.tgz#7f91be317f6a466efed3c9f2980ad8a4ee8b0fa5"
|
||||
integrity sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==
|
||||
dependencies:
|
||||
path-key "^3.0.0"
|
||||
|
||||
npm-run-path@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
|
||||
integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
|
||||
dependencies:
|
||||
path-key "^3.0.0"
|
||||
|
||||
once@^1.3.1, once@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
|
||||
dependencies:
|
||||
wrappy "1"
|
||||
|
||||
onetime@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
|
||||
integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
|
||||
dependencies:
|
||||
mimic-fn "^2.1.0"
|
||||
|
||||
opencollective-postinstall@^2.0.2:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259"
|
||||
integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==
|
||||
|
||||
p-finally@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561"
|
||||
integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==
|
||||
|
||||
p-limit@^2.2.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
|
||||
integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
|
||||
dependencies:
|
||||
p-try "^2.0.0"
|
||||
|
||||
p-locate@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
|
||||
integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
|
||||
dependencies:
|
||||
p-limit "^2.2.0"
|
||||
|
||||
p-map@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
|
||||
integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
|
||||
dependencies:
|
||||
aggregate-error "^3.0.0"
|
||||
|
||||
p-try@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
|
||||
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
|
||||
|
||||
parent-module@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
|
||||
integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
|
||||
dependencies:
|
||||
callsites "^3.0.0"
|
||||
|
||||
parse-json@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f"
|
||||
integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.0.0"
|
||||
error-ex "^1.3.1"
|
||||
json-parse-better-errors "^1.0.1"
|
||||
lines-and-columns "^1.1.6"
|
||||
|
||||
path-exists@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
|
||||
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
|
||||
|
||||
path-key@^3.0.0, path-key@^3.1.0:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
|
||||
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
|
||||
|
||||
path-type@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
|
||||
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
|
||||
|
||||
picomatch@^2.0.5:
|
||||
version "2.2.2"
|
||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
|
||||
integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
|
||||
|
||||
pkg-dir@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
|
||||
integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
|
||||
dependencies:
|
||||
find-up "^4.0.0"
|
||||
|
||||
please-upgrade-node@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
|
||||
integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==
|
||||
dependencies:
|
||||
semver-compare "^1.0.0"
|
||||
|
||||
prettier@^2.0.5:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4"
|
||||
integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==
|
||||
|
||||
pretty-quick@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-2.0.1.tgz#417ee605ade98ecc686e72f63b5d28a2c35b43e9"
|
||||
integrity sha512-y7bJt77XadjUr+P1uKqZxFWLddvj3SKY6EU4BuQtMxmmEFSMpbN132pUWdSG1g1mtUfO0noBvn7wBf0BVeomHg==
|
||||
dependencies:
|
||||
chalk "^2.4.2"
|
||||
execa "^2.1.0"
|
||||
find-up "^4.1.0"
|
||||
ignore "^5.1.4"
|
||||
mri "^1.1.4"
|
||||
multimatch "^4.0.0"
|
||||
|
||||
pump@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
|
||||
integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
|
||||
dependencies:
|
||||
end-of-stream "^1.1.0"
|
||||
once "^1.3.1"
|
||||
|
||||
resolve-from@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
|
||||
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
|
||||
|
||||
restore-cursor@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
|
||||
integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
|
||||
dependencies:
|
||||
onetime "^5.1.0"
|
||||
signal-exit "^3.0.2"
|
||||
|
||||
rxjs@^6.5.5:
|
||||
version "6.5.5"
|
||||
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec"
|
||||
integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
semver-compare@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
|
||||
integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
|
||||
|
||||
semver-regex@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338"
|
||||
integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==
|
||||
|
||||
shebang-command@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
|
||||
integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
|
||||
dependencies:
|
||||
shebang-regex "^3.0.0"
|
||||
|
||||
shebang-regex@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
|
||||
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
|
||||
|
||||
signal-exit@^3.0.2:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
|
||||
integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
|
||||
|
||||
slash@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
|
||||
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
|
||||
|
||||
slice-ansi@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
|
||||
integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
|
||||
dependencies:
|
||||
ansi-styles "^4.0.0"
|
||||
astral-regex "^2.0.0"
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
|
||||
slice-ansi@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
|
||||
integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
|
||||
dependencies:
|
||||
ansi-styles "^4.0.0"
|
||||
astral-regex "^2.0.0"
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
|
||||
string-argv@0.3.1:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da"
|
||||
integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==
|
||||
|
||||
string-width@^4.1.0, string-width@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
|
||||
integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
|
||||
dependencies:
|
||||
emoji-regex "^8.0.0"
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
stringify-object@^3.3.0:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
|
||||
integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
|
||||
dependencies:
|
||||
get-own-enumerable-property-symbols "^3.0.0"
|
||||
is-obj "^1.0.1"
|
||||
is-regexp "^1.0.0"
|
||||
|
||||
strip-ansi@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
|
||||
integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
|
||||
dependencies:
|
||||
ansi-regex "^5.0.0"
|
||||
|
||||
strip-final-newline@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
|
||||
integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
|
||||
|
||||
supports-color@^5.3.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
||||
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
|
||||
dependencies:
|
||||
has-flag "^3.0.0"
|
||||
|
||||
supports-color@^7.1.0:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1"
|
||||
integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==
|
||||
dependencies:
|
||||
has-flag "^4.0.0"
|
||||
|
||||
through@^2.3.8:
|
||||
version "2.3.8"
|
||||
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
|
||||
|
||||
to-regex-range@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
|
||||
integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
|
||||
dependencies:
|
||||
is-number "^7.0.0"
|
||||
|
||||
tslib@^1.9.0:
|
||||
version "1.13.0"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
|
||||
integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
|
||||
|
||||
type-fest@^0.11.0:
|
||||
version "0.11.0"
|
||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
|
||||
integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
|
||||
|
||||
which-pm-runs@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
|
||||
integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=
|
||||
|
||||
which@^2.0.1:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
|
||||
integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
wrap-ansi@^6.2.0:
|
||||
version "6.2.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
|
||||
integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
|
||||
dependencies:
|
||||
ansi-styles "^4.0.0"
|
||||
string-width "^4.1.0"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
wrappy@1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
||||
|
||||
yaml@^1.7.2:
|
||||
version "1.10.0"
|
||||
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e"
|
||||
integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==
|
||||