Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2630642b04 | ||
|
|
9b9ffb41ea | ||
|
|
b5bacbfec2 | ||
|
|
684a86fb5f | ||
|
|
2c0a25d40b | ||
|
|
af2f67e238 | ||
|
|
24947afb0d | ||
|
|
fb40152692 | ||
|
|
a51cf0752c | ||
|
|
d4da3cd072 | ||
|
|
032ba86c9a | ||
|
|
0e72a51245 | ||
|
|
6091861ccf | ||
|
|
50e44b8bbe | ||
|
|
eb317ceb76 | ||
|
|
2bda839259 | ||
|
|
a48f6223fe | ||
|
|
f851148297 | ||
|
|
2273279bb9 | ||
|
|
2e6d2d5fd6 | ||
|
|
08458793d0 | ||
|
|
3aad210343 | ||
|
|
84a9b9aecd | ||
|
|
64352a863f | ||
|
|
140be9887f | ||
|
|
03003ca756 | ||
|
|
7a62d700a0 | ||
|
|
792ca1c114 | ||
|
|
bcbfa28f63 | ||
|
|
248f7a7320 | ||
|
|
108e7c2d3a | ||
|
|
a01706822e | ||
|
|
9abac1cff2 | ||
|
|
e5c33430af | ||
|
|
d40b7d9d14 | ||
|
|
eee897c2f6 | ||
|
|
bddefe28b3 | ||
|
|
78d14facc9 | ||
|
|
0d913eab91 | ||
|
|
91fa4e5e19 | ||
|
|
fe7bc97607 | ||
|
|
899bf4a651 | ||
|
|
286b34d71d | ||
|
|
f4f23b3a5e |
@@ -1,37 +0,0 @@
|
||||
name: github pages
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive # Fetch Hugo themes (true OR recursive)
|
||||
fetch-depth: 1 # Fetch all history for .GitInfo and .Lastmod
|
||||
|
||||
- name: Setup Hugo
|
||||
uses: peaceiris/actions-hugo@v2
|
||||
with:
|
||||
hugo-version: 'latest'
|
||||
extended: true
|
||||
|
||||
- name: Install npm packages
|
||||
run: |
|
||||
npm install # reads info from package.js
|
||||
|
||||
- name: Build
|
||||
run: hugo --minify --environment production # uses default config/_default/* files + merges with config/production ones
|
||||
|
||||
- name: Deploy
|
||||
uses: peaceiris/actions-gh-pages@v3
|
||||
if: github.ref == 'refs/heads/move-to-hugo-doks'
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
publish_dir: ./public
|
||||
@@ -1,5 +0,0 @@
|
||||
node_modules
|
||||
.DS_Store
|
||||
.docz/
|
||||
public/
|
||||
resources/
|
||||
@@ -1,72 +0,0 @@
|
||||
image: monachus/hugo
|
||||
|
||||
variables:
|
||||
GIT_SUBMODULE_STRATEGY: recursive
|
||||
ARTIFACT_NAME: documentation
|
||||
REPO_NAME: kerberos-io/${ARTIFACT_NAME}
|
||||
REPO_DIR: gitlab.com/${REPO_NAME}
|
||||
CI_VERSION: "1.0.${CI_PIPELINE_ID}"
|
||||
DOCKER_HOST: tcp://localhost:2375
|
||||
NAMESPACE: kerberos
|
||||
REGISTRY: registry.gitlab.com/kerberos-io/${ARTIFACT_NAME}
|
||||
|
||||
stages:
|
||||
- build-staging # Staging environment -> develop
|
||||
- build-production # Production environment -> master
|
||||
- docker # All branches
|
||||
- kubernetes-staging # Staging environment -> develop
|
||||
- kubernetes-production # Production environment -> master
|
||||
|
||||
build-staging:
|
||||
image: node:10.22.1
|
||||
stage: build-staging
|
||||
script:
|
||||
- yarn
|
||||
- yarn run build-staging
|
||||
artifacts:
|
||||
paths:
|
||||
- public
|
||||
except:
|
||||
- master
|
||||
|
||||
build-production:
|
||||
image: node:10.22.1
|
||||
stage: build-production
|
||||
script:
|
||||
- yarn
|
||||
- yarn run build
|
||||
artifacts:
|
||||
paths:
|
||||
- public
|
||||
only:
|
||||
- master
|
||||
|
||||
docker:
|
||||
image: docker:stable
|
||||
stage: docker
|
||||
services:
|
||||
- docker:18.09.7-dind
|
||||
script:
|
||||
- docker login -u ${gitlab_id} -p ${gitlab_token} $CI_REGISTRY
|
||||
- docker build --build-arg gitlab_id=${gitlab_id} --build-arg gitlab_token=${gitlab_token} -t $CI_REGISTRY/$REPO_NAME:$CI_VERSION .
|
||||
- docker push $CI_REGISTRY/$REPO_NAME:$CI_VERSION
|
||||
|
||||
kubernetes-staging:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/haoshuwei24/kubectl:1.16.6
|
||||
stage: kubernetes-staging
|
||||
environment:
|
||||
name: staging
|
||||
script:
|
||||
- kubectl patch deployment kerberos-documentation --patch="{\"spec\":{\"template\":{\"spec\":{\"containers\":[{\"name\":\"kerberos-documentation\",\"image\":\"${REGISTRY}:${CI_VERSION}\"}]}}}}" -n kerberos-ecosystem
|
||||
except:
|
||||
- master
|
||||
|
||||
kubernetes-production:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/haoshuwei24/kubectl:1.16.6
|
||||
stage: kubernetes-production
|
||||
environment:
|
||||
name: production
|
||||
script:
|
||||
- kubectl patch deployment kerberos-documentation --patch="{\"spec\":{\"template\":{\"spec\":{\"containers\":[{\"name\":\"kerberos-documentation\",\"image\":\"${REGISTRY}:${CI_VERSION}\"}]}}}}" -n kerberos-ecosystem
|
||||
only:
|
||||
- master
|
||||
@@ -1,5 +0,0 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding" addBOMForNewFiles="with NO BOM" />
|
||||
</project>
|
||||
@@ -1,6 +0,0 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
</profile>
|
||||
</component>
|
||||
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="JavaScriptSettings">
|
||||
<option name="languageLevel" value="JSX" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/documentation.iml" filepath="$PROJECT_DIR$/.idea/documentation.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -0,0 +1,6 @@
|
||||
<!doctype html><html lang=en-us><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="ie=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=stylesheet href=https://doc.kerberos.io/main.5aa8061fdddcae33bf9aae606a659f783fca649c2a6c915897a14d1088493ae547064045e7ca5a43d69061955d449757d1bcb708760ae71f478384770974e798.css integrity="sha512-WqgGH93crjO/mq5gamWfeD/KZJwqbJFYl6FNEIhJOuVHBkBF58paQ9aQYZVdRJdX0by3CHYK5x9Hg4R3CXTnmA==" crossorigin=anonymous><noscript><style>img.lazyload{display:none}</style></noscript><meta name=robots content="noindex, follow"><title>404 Page not found - Kerberos Docs</title><meta name=description content="Open and extensible video surveillance and analytics solution for everyone at any location."><link rel=canonical href=https://doc.kerberos.io/404.html><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="/doks.png"><meta name=twitter:title content="404 Page not found"><meta name=twitter:description content="Open and extensible video surveillance and analytics solution for everyone at any location."><meta name=twitter:site content="@kerberosio"><meta name=twitter:creator content="@kerberosio"><meta property="og:title" content="404 Page not found"><meta property="og:description" content="Open and extensible video surveillance and analytics solution for everyone at any location."><meta property="og:type" content="website"><meta property="og:url" content="/404.html"><meta property="og:image" content="/doks.png"><meta property="og:site_name" content="Kerberos Docs"><meta property="article:publisher" content="https://www.facebook.com/"><meta property="article:author" content="https://www.facebook.com/"><meta property="og:locale" content="en_US"><script type=application/ld+json>{"@context":"http://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/doc.kerberos.io\/"},{"@type":"ListItem","position":3,"name":"404.Html","item":"https:\/\/doc.kerberos.io\/\/404.html\/"}]}</script><meta name=theme-color content="#fff"><link rel=apple-touch-icon sizes=180x180 href=https://doc.kerberos.io/favicons/apple-touch-icon.png><link rel=icon type=image/png sizes=32x32 href=https://doc.kerberos.io/favicons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=https://doc.kerberos.io/favicons/favicon-16x16.png><link rel=manifest href=https://doc.kerberos.io/site.webmanifest><script async defer data-domain=doc.kerberos.io src=https://plausible.kerberos.io/js/plausible.js></script></head><body class=error404><div class="header-bar fixed-top"></div><header class="navbar fixed-top navbar-expand-md navbar-light"><div class=container><input class="menu-btn order-0" type=checkbox id=menu-btn>
|
||||
<label class="menu-icon d-md-none" for=menu-btn><span class=navicon></span></label><a class="navbar-brand order-1 order-md-0 me-auto" href=https://doc.kerberos.io/><img src=https://doc.kerberos.io/images/kerberos-logo.svg class=logo>
|
||||
Kerberos Docs</a>
|
||||
<button id=mode class="btn btn-link order-2 order-md-4" type=button aria-label="Toggle mode">
|
||||
<span class=toggle-dark><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-moon"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg></span><span class=toggle-light><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-sun"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></span></button><div class="collapse navbar-collapse order-4 order-md-1"><ul class="navbar-nav main-nav me-auto order-5 order-md-2"><li class=nav-item><a class=nav-link href=https://kerberos.io>Homepage</a></li></ul><div class="break order-6 d-md-none"></div><form class="navbar-form flex-grow-1 order-7 order-md-3"><input id=userinput class="form-control is-search" type=search placeholder="Search docs..." aria-label="Search docs..." autocomplete=off><div id=suggestions class="shadow bg-white rounded"></div></form></div></div></header><div class="wrap container" role=document><div class=content><div class="row justify-content-center"><div class="col-md-12 col-lg-10 col-xl-8"><article><h1 class=text-center>Page not found :(</h1><p class=text-center>The page you are looking for doesn't exist or has been moved.</p></article></div></div></div></div><footer class="footer text-muted"><div class=container><div class=row><div class="col-lg-6 order-last order-lg-first"><ul class="navbar-nav social-nav"><li class=copyright>© 2014–2021
|
||||
<a href=https://kerberos.io>Kerberos.io</a></li><li class=nav-item><a class=link href=https://twitter.com/kerberosio title=Twitter><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" 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 01-3.14 1.53 4.48 4.48.0 00-7.86 3v1A10.66 10.66.0 013 4s-4 9 5 13a11.64 11.64.0 01-7 2c9 5 20 0 20-11.5a4.5 4.5.0 00-.08-.83A7.72 7.72.0 0023 3z"/></svg><span class="ms-2 visually-hidden">Twitter</span></a></li><li class=nav-item><a class=link href=https://github.com/kerberos-io title=GitHub><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" 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 00-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44.0 0020 4.77 5.07 5.07.0 0019.91 1S18.73.65 16 2.48a13.38 13.38.0 00-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07.0 005 4.77 5.44 5.44.0 003.5 8.55c0 5.42 3.3 6.61 6.44 7A3.37 3.37.0 009 18.13V22"/></svg><span class="ms-2 visually-hidden">GitHub</span></a></li><li class=nav-item><a class=link href=https://www.reddit.com/r/kerberos_io/ title=Reddit><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-message-circle"><path d="M21 11.5a8.38 8.38.0 01-.9 3.8A8.5 8.5.0 0112.5 20a8.38 8.38.0 01-3.8-.9L3 21l1.9-5.7A8.38 8.38.0 014 11.5a8.5 8.5.0 014.7-7.6 8.38 8.38.0 013.8-.9h.5a8.48 8.48.0 018 8v.5z"/></svg><span class="ms-2 visually-hidden">Reddit</span></a></li></ul></div><div class="col-lg-10 order-first order-lg-last text-lg-end"><ul class=list-inline><li class=list-inline-item>Learn more about</li><li class=list-inline-item><a href=https://kerberos.io/product/enterprise-agent/>Enterprise Agent</a></li><li class=list-inline-item><a href=https://kerberos.io/product/hub/>Hub</a></li><li class=list-inline-item><a href=https://kerberos.io/product/open-source/>Kerberos Opensource</a></li><li class=list-inline-item><a href=https://kerberos.io/product/vault/>Vault</a></li></ul></div></div></div></footer><script src=https://doc.kerberos.io/js/highlight.min.13bf6b39f28cd07b0780c0c154bf050bad1e7b73231c15e43b993504cca3fa814222ded3c525f429528451fe039a5078c71ae4d000486d26f9b920cc7db474da.js integrity="sha512-E79rOfKM0HsHgMDBVL8FC60ee3MjHBXkO5k1BMyj+oFCIt7TxSX0KVKEUf4DmlB4xxrk0ABIbSb5uSDMfbR02g==" crossorigin=anonymous defer></script><script src=https://doc.kerberos.io/main.min.89223fc6eee34e2dc10266cff3c7fc87949c595388f775ec6e93132410cef77e5ff7f24a81db03c9b9eb6d2e6d75ea5a7d22945c574b65dfeb426f65af771230.js integrity="sha512-iSI/xu7jTi3BAmbP88f8h5ScWVOI93XsbpMTJBDO935f9/JKgdsDybnrbS5tdepafSKUXFdLZd/rQm9lr3cSMA==" crossorigin=anonymous defer></script><script src=https://doc.kerberos.io/index.min.71e05784bf5441c378e8824d18e4b5a057f28cde2bd06f927216eb278586f7ea7d96309df4600474b3b928ef2b635a64248e2cf3a7a023136087ed4050162608.js integrity="sha512-ceBXhL9UQcN46IJNGOS1oFfyjN4r0G+SchbrJ4WG9+p9ljCd9GAEdLO5KO8rY1pkJI4s86egIxNgh+1AUBYmCA==" crossorigin=anonymous defer></script></body></html>
|
||||
@@ -1,243 +0,0 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
### [0.2.3](https://github.com/h-enk/doks/compare/v0.2.2...v0.2.3) (2021-04-02)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* update for netlify dev support ([10d0b45](https://github.com/h-enk/doks/commit/10d0b45203003a43727521dc9f5c35e655500309))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* add class user added to img-simple shortcode ([bce8863](https://github.com/h-enk/doks/commit/bce8863269dd036146d5b6e447d67a23de70227d))
|
||||
* drop npm workflow ([977bbda](https://github.com/h-enk/doks/commit/977bbdad82e8e21599e1fcfc0d93fc4e448cf2af))
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
* bump versions to latest ([171293a](https://github.com/h-enk/doks/commit/171293a692450d45348be2870434db2a01578de9))
|
||||
|
||||
### [0.2.2](https://github.com/h-enk/doks/compare/v0.2.1...v0.2.2) (2021-03-26)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* update default highlight style ([28a3b39](https://github.com/h-enk/doks/commit/28a3b39fb9653db3f627cd55d610f28ed95860b3))
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
* bump bootstrap to 5.0.0-beta3 ([f76e68e](https://github.com/h-enk/doks/commit/f76e68e832737c5fbc2421f164988767dddc5d99))
|
||||
* bump versions to latest ([843e8d4](https://github.com/h-enk/doks/commit/843e8d45252bc596f8422fbce6938b38976373f9))
|
||||
|
||||
### [0.2.1](https://github.com/h-enk/doks/compare/v0.2.0...v0.2.1) (2021-03-18)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* update package.json for npm workflow ([83b2c0e](https://github.com/h-enk/doks/commit/83b2c0e002e09aabc0f4b1e8fb30353151707d8b))
|
||||
|
||||
## [0.2.0](https://github.com/h-enk/doks/compare/v0.1.6...v0.2.0) (2021-03-18)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add doks default style + examples ([ad91b05](https://github.com/h-enk/doks/commit/ad91b0523e6e240c98710bfedfd31342cb2389dc))
|
||||
* add highlight.js as an option ([5180bd5](https://github.com/h-enk/doks/commit/5180bd53c6349372916907783fa9d0d3b22755af))
|
||||
* add katex math typesetting ([253b938](https://github.com/h-enk/doks/commit/253b938a2e303a06d07488c6eae79c74442e56d6))
|
||||
* add npm-package workflow ([e2ba008](https://github.com/h-enk/doks/commit/e2ba0086f780380fa171cfc2efaa1e868cfc5fc5))
|
||||
* add npm-package workflow ([be4b68c](https://github.com/h-enk/doks/commit/be4b68c3d85a04251a9cdcbf1e5a3639b9c53144))
|
||||
* add optional breadcrumb trail ([9c67aca](https://github.com/h-enk/doks/commit/9c67aca368f68ab916ff61caa36e0de69c43dec3))
|
||||
* add table support in markdown ([5ee11a8](https://github.com/h-enk/doks/commit/5ee11a80e274d5e71ff7a4809516101e7e7ea214))
|
||||
* added options lazySizes, clipBoard, instantPage, flexSearch, and darkMode ([5f03d61](https://github.com/h-enk/doks/commit/5f03d61e81aff6f8a0a194cb23bcf821c3476481))
|
||||
* added options lazySizes, clipBoard, instantPage, flexSearch, and darkMode ([5099c47](https://github.com/h-enk/doks/commit/5099c4773195aab0a39bd160330bc25f3173c3b0))
|
||||
* added options lazySizes, clipBoard, instantPage, flexSearch, and darkMode ([226f661](https://github.com/h-enk/doks/commit/226f661966ebb68f595541b31e6605d1c71efbdd))
|
||||
* preload key katex fonts ([6c4d45d](https://github.com/h-enk/doks/commit/6c4d45d248ee9b58745105d91259fc2dfb9540b3))
|
||||
* update bootstrap to 5.0.0-beta2 ([22afec7](https://github.com/h-enk/doks/commit/22afec709a1f11ef010d3436eca401cd4d5fd62f))
|
||||
* update netlify.toml for netlify-cli use ([9581fc4](https://github.com/h-enk/doks/commit/9581fc4c44d2fdfe6b6093365fdbf5dcd2b869a2))
|
||||
* update netlify.toml for netlify-cli use ([20bac2a](https://github.com/h-enk/doks/commit/20bac2a25bcdb3156120afd0d1b6543c0235f3c7))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* linting error ([92798c9](https://github.com/h-enk/doks/commit/92798c92cd300bf1ed953c2a25bcbe0f8b24c1b2))
|
||||
* script loading + script order ([89784d9](https://github.com/h-enk/doks/commit/89784d9656712ce31d83c038a87821f78aa07a3c))
|
||||
* update content security header ([64efe3f](https://github.com/h-enk/doks/commit/64efe3ff00c5d315b43d40a4dc056ef7a3f88151))
|
||||
* update content security header ([e0996b3](https://github.com/h-enk/doks/commit/e0996b36cbdc439bf0ad6595342c0f965f31c119))
|
||||
* update content security header ([b54cae0](https://github.com/h-enk/doks/commit/b54cae0621211bce0754c17fdc302c96b6e50f6c))
|
||||
* update content security header ([6d38761](https://github.com/h-enk/doks/commit/6d387614d584607d07c3f944ee55b8a2d6a4ce4e))
|
||||
* update content security headers ([c70baa4](https://github.com/h-enk/doks/commit/c70baa448770d39d5c8f0842f742f5f8828a31ca))
|
||||
* update content security headers ([8df0fdd](https://github.com/h-enk/doks/commit/8df0fdd8c311752de685ed10f7e8ec1d5d22f69c))
|
||||
* update content security headers ([d1008a7](https://github.com/h-enk/doks/commit/d1008a736639e731679fd1e18eba4e6d437f00ad))
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
* bump versions to latest ([e43f982](https://github.com/h-enk/doks/commit/e43f9821e49792e2e06f2e18ac419d58befc7723))
|
||||
* bump versions to latest ([9cdd693](https://github.com/h-enk/doks/commit/9cdd69352bb02c12a6174cea5d7d6b330e47f1b5))
|
||||
|
||||
### [0.1.6](https://github.com/h-enk/doks/compare/v0.1.5...v0.1.6) (2021-03-01)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add check commands ([85baab4](https://github.com/h-enk/doks/commit/85baab47ff06557051f373aa6afeb114fb40f50f))
|
||||
* match active class docs menu on identifier ([7384cfe](https://github.com/h-enk/doks/commit/7384cfe8f1652b8053f077c964633d4ad12cf281))
|
||||
* update package-lock.json ([8c73d74](https://github.com/h-enk/doks/commit/8c73d741fd789e829c35bf51cfc25c6d790b0dbb))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* convert tabs to spaces ([6511531](https://github.com/h-enk/doks/commit/6511531c5e3f4ae1a9ad5e64972bd34c8e62cb0d))
|
||||
* remove extra space in else statement ([03637e5](https://github.com/h-enk/doks/commit/03637e547ef7afa1dcea853746634df3161656db))
|
||||
* update urls for deploy to github+ ([8c10161](https://github.com/h-enk/doks/commit/8c101613fa488518152675bb0916e74d444df1e2))
|
||||
|
||||
|
||||
### Documentation
|
||||
|
||||
* update faq ([555fd17](https://github.com/h-enk/doks/commit/555fd17bb21d94764688f8f0c818d352183244b7))
|
||||
* update faq ([f751f3f](https://github.com/h-enk/doks/commit/f751f3ff02b736b36854e396b2536a9fef311c50))
|
||||
* update readme ([f32c60f](https://github.com/h-enk/doks/commit/f32c60f1ff6fe7f898efa7dc5ff97bd4b60148a6))
|
||||
* update requirement sections ([22a8bfb](https://github.com/h-enk/doks/commit/22a8bfbc87b20ae4d03b733b32f1e1f956e3671c))
|
||||
* update requirements sections ([3767e8b](https://github.com/h-enk/doks/commit/3767e8bfa0893d9bb827c35b5b2694c023e78ceb))
|
||||
* update requirements sections ([8e14777](https://github.com/h-enk/doks/commit/8e14777805500abbf7cbc840a4a19c7635ce5b96))
|
||||
* update requirements sections ([49f803e](https://github.com/h-enk/doks/commit/49f803e7e3d905d01ff00f5d02357defb885fe7e))
|
||||
* update requirements sections ([4791d5a](https://github.com/h-enk/doks/commit/4791d5a0ba464c57f74d3bd6736985830f0d9e71))
|
||||
* update requirements sections ([5321e8d](https://github.com/h-enk/doks/commit/5321e8d3c1094074c2503c3895579ebe32846176))
|
||||
* update requirements sections ([920776a](https://github.com/h-enk/doks/commit/920776a6d55167cd8ce40f2edfcc37f2841e3def))
|
||||
* update requirements sections ([3420ae9](https://github.com/h-enk/doks/commit/3420ae9c55dedd5424bf7f2f32a3cf1dacaf4e6f))
|
||||
* update showcase link ([3e00037](https://github.com/h-enk/doks/commit/3e00037d78b3e980bdbdf005a5c13d9a39d2fa3d))
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
* bump autoprefixer, bootstrap, stylelint, and netlify-lambda to latest versions ([955cb46](https://github.com/h-enk/doks/commit/955cb46a5d4936ce355c28a4a2a8b5c025a8ca1c))
|
||||
* bump deps to latest ([05de29a](https://github.com/h-enk/doks/commit/05de29ace1e735840aea04f90924c2c833b00b86))
|
||||
* bump postcss-purgecss to 4.0.0 + eslint to 7.18.0 ([44e90f2](https://github.com/h-enk/doks/commit/44e90f2bc944693967c6e3864673d8f21ee07648))
|
||||
* bump versions to latest ([857906c](https://github.com/h-enk/doks/commit/857906c69b2d9779abd158dd88c1057f84c8eb6f))
|
||||
* bump versions to latest ([5e52acb](https://github.com/h-enk/doks/commit/5e52acbc35db30267867e1b0981c8f4299bdf51d))
|
||||
* bump versions to latest ([3087ae0](https://github.com/h-enk/doks/commit/3087ae0f521a780d38ccbd0afbb07e23fa9fad7d))
|
||||
|
||||
### [0.1.5](https://github.com/h-enk/doks/compare/v0.1.4...v0.1.5) (2021-01-12)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add hugo extended as a dependency ([258224c](https://github.com/h-enk/doks/commit/258224c7880911c709f80e478cacf265fafbbb5c))
|
||||
* add hugothemes reqs ([b3afb4b](https://github.com/h-enk/doks/commit/b3afb4b4055f5cfe5a28d355ac26f577fc442392))
|
||||
* remove exampleSite ([70db6bc](https://github.com/h-enk/doks/commit/70db6bca005c2e2f82e3ac64d9150c4d87889758))
|
||||
|
||||
|
||||
### Documentation
|
||||
|
||||
* update code of conduct ([411123b](https://github.com/h-enk/doks/commit/411123b207cfe0715c31455f9e5cbcfd9a2d93cc))
|
||||
* update frontpage ([f2f4937](https://github.com/h-enk/doks/commit/f2f49370a1ecd7d312de1b348e08e26d0a327121))
|
||||
* update homepage ([4e65d01](https://github.com/h-enk/doks/commit/4e65d012c5887ff8db9650006d8c6f2303d1b338))
|
||||
* update readme ([7283eb9](https://github.com/h-enk/doks/commit/7283eb997da055892d95015f1411b8528f9b2298))
|
||||
* update readme ([9dc2f0e](https://github.com/h-enk/doks/commit/9dc2f0ebfe75f968f77290d911e3be035b34e954))
|
||||
* update readme ([3ed1ad6](https://github.com/h-enk/doks/commit/3ed1ad6376959a678ceac990310dd51d2f2864f8))
|
||||
* update readme ([6a35faf](https://github.com/h-enk/doks/commit/6a35fafe485d82f4a327b8b4ed10a703eac4af1b))
|
||||
* update readme ([40dd5e4](https://github.com/h-enk/doks/commit/40dd5e4eea340f2fae24484bb86325f4410378ff))
|
||||
* update readme ([7b75c47](https://github.com/h-enk/doks/commit/7b75c47c9e0e5953b781ce4f784a3083361970fb))
|
||||
* update readme ([2d33818](https://github.com/h-enk/doks/commit/2d3381885ab6578ed44720e8f99033429034ba2a))
|
||||
* update readme ([632623f](https://github.com/h-enk/doks/commit/632623f29401f38e0a853508346a94267372dfa1))
|
||||
* update readme for docs discussions ([fb9e340](https://github.com/h-enk/doks/commit/fb9e340f6e48293ed2d32a73754ae081f41a0fc9))
|
||||
* update showcase link ([74724eb](https://github.com/h-enk/doks/commit/74724eb4c53d15475492b2b7c103b3056260fd28))
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
* bump to latest versions ([83f4163](https://github.com/h-enk/doks/commit/83f41636f71e547f4928597bdf67128fe954f83e))
|
||||
* bump to latest versions ([372d9cb](https://github.com/h-enk/doks/commit/372d9cb64d4d68b6e95b252112e27ff9123b456c))
|
||||
* bump versions to latest ([6184067](https://github.com/h-enk/doks/commit/6184067621a33cf0e53a4ae9fab269a91a11b730))
|
||||
* bump versions to latest ([940f30d](https://github.com/h-enk/doks/commit/940f30dcebfde1a4a8900118fdf84f57410ed63a))
|
||||
* bump versions to latest ([751d6c6](https://github.com/h-enk/doks/commit/751d6c68caa1811be92eaae378e16413f09eb12e))
|
||||
* bump versions to latest ([b66c0a6](https://github.com/h-enk/doks/commit/b66c0a6221cddbaf997c032222276185cc910d9d))
|
||||
* bump versions to latest ([1d7e3b8](https://github.com/h-enk/doks/commit/1d7e3b873b537e498ef4ef5ce5548b252a62c4bc))
|
||||
* bump versions to latest ([0aa2e0f](https://github.com/h-enk/doks/commit/0aa2e0f7e07e930ba507f8652e0d6375c562def7))
|
||||
* bump versions to latest ([ce5c733](https://github.com/h-enk/doks/commit/ce5c7336f95c3d6e6be4c7b3fb7db3812b7ac4ac))
|
||||
* bump versions to latest ([cc62487](https://github.com/h-enk/doks/commit/cc6248722a91f163359ce42e83f06e0ae5277ef7))
|
||||
|
||||
### [0.1.4](https://github.com/h-enk/doks/compare/v0.1.3...v0.1.4) (2020-12-03)
|
||||
|
||||
|
||||
### Documentation
|
||||
|
||||
* update content ([63ca41e](https://github.com/h-enk/doks/commit/63ca41e1076375eb99aad5ca6d77d95516b6f349))
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
* bump versions ([c254be6](https://github.com/h-enk/doks/commit/c254be61754071600665858d6a7d2e2fbc105af3))
|
||||
* bump versions to latest ([831442c](https://github.com/h-enk/doks/commit/831442c1a6f3372b2930681ca9c937d123b5f6a3))
|
||||
* bump versions to latest ([0377b0d](https://github.com/h-enk/doks/commit/0377b0de75a3cc8027bd255961f6d0c184d82575))
|
||||
* bump versions to latest ([358bad6](https://github.com/h-enk/doks/commit/358bad680156937886f2957b6c6fcdbcdd97782e))
|
||||
* bump versions to latest ([7ce56d0](https://github.com/h-enk/doks/commit/7ce56d0a362c5099c0a6c50f6ad0f1c7ba969218))
|
||||
|
||||
### [0.1.3](https://github.com/h-enk/doks/compare/v0.1.2...v0.1.3) (2020-11-17)
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
* add doks version file ([f8dcfbe](https://github.com/h-enk/doks/commit/f8dcfbeebfda5fef533b9b7bc2463fa0dfafd5fa))
|
||||
* update doks version file ([d326669](https://github.com/h-enk/doks/commit/d326669c1d170cd5a76df1faafea472f3132fdf5))
|
||||
|
||||
### [0.1.2](https://github.com/h-enk/doks/compare/v0.1.1...v0.1.2) (2020-11-17)
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
* bump versions ([6ce5813](https://github.com/h-enk/doks/commit/6ce5813543417f2328846a78b971201d7611781d))
|
||||
|
||||
### [0.1.1](https://github.com/h-enk/doks/compare/v0.1.0...v0.1.1) (2020-11-10)
|
||||
|
||||
|
||||
### Documentation
|
||||
|
||||
* update content ([c4c83eb](https://github.com/h-enk/doks/commit/c4c83eb9b68674553c6a7e988249a808d75250b4))
|
||||
* update reasons ([1cec423](https://github.com/h-enk/doks/commit/1cec4237b395ff306b765d47b29b8410c2884921))
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
* bump eslint ([d794dab](https://github.com/h-enk/doks/commit/d794dabbe389b0f616ccfca564607f9be4670e0c))
|
||||
* reinstall ([6705f4b](https://github.com/h-enk/doks/commit/6705f4bbc4da4cd967e7165ab3681137014633bb))
|
||||
|
||||
## 0.1.0 (2020-11-06)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add flexsearch ([97d8e2c](https://github.com/h-enk/doks/commit/97d8e2c0e2568f9f9f653dcc243d06aa25482e70))
|
||||
* add standard-version ([6d83ec3](https://github.com/h-enk/doks/commit/6d83ec308e0a9c4db5aa8d2f2c8309ad09673605))
|
||||
* update static assets ([1b16e6b](https://github.com/h-enk/doks/commit/1b16e6bb3d87888b51eff2a8ce7d482cc1a5daf6))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* update badges ([90cea78](https://github.com/h-enk/doks/commit/90cea786c1aec4cc7004fdf9571ad05a739aa96c))
|
||||
* update file path ([73004c3](https://github.com/h-enk/doks/commit/73004c3f8eaee87957ab53bb1f27716acde7a361))
|
||||
|
||||
|
||||
### Documentation
|
||||
|
||||
* update ci badge ([7c4373a](https://github.com/h-enk/doks/commit/7c4373a3a9a29f35f858f27ad4b67ad0379a3da0))
|
||||
* update content ([c6ea4f3](https://github.com/h-enk/doks/commit/c6ea4f3ae54e1c7b890dffb2243c0a81eb96b295))
|
||||
* update content ([c8c403d](https://github.com/h-enk/doks/commit/c8c403dbf9963eeef3c7dca7f6334929bbc5383b))
|
||||
* update gist id ([81d7b1a](https://github.com/h-enk/doks/commit/81d7b1a5df91f238378723018a84d0dd4cd12dd5))
|
||||
* update README ([a1d2e80](https://github.com/h-enk/doks/commit/a1d2e8091a0a2051fdbb3384ad797d8cd5251ce6))
|
||||
* update README ([a9aa6ab](https://github.com/h-enk/doks/commit/a9aa6ab1af1ef5c8619dd3d7c64d96d5a21d956c))
|
||||
* update README ([d0bcf8d](https://github.com/h-enk/doks/commit/d0bcf8d69dfd2d28d9f603945efc37a64b8b529b))
|
||||
* update README ([f6dcccc](https://github.com/h-enk/doks/commit/f6dcccc458a1a4c5cac655976a665fb66b1f7b7a))
|
||||
* update README ([eb4e714](https://github.com/h-enk/doks/commit/eb4e714f4f1fd97117a9fc155df6b6e4be55c0ed))
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
* bump postcss ([12411c3](https://github.com/h-enk/doks/commit/12411c38a98fb362ff348e5c151fcb7813e8691e))
|
||||
* bump postcss-cli ([88b49b5](https://github.com/h-enk/doks/commit/88b49b552849ab807f17ff9bfacfc847d9c2dbd2))
|
||||
* bump versions ([53cf8ba](https://github.com/h-enk/doks/commit/53cf8ba6e260687c4fc5eea0774a7d0e6aa559f8))
|
||||
* update for dependabot PR's ([bad7deb](https://github.com/h-enk/doks/commit/bad7debffa8d8e6b442edf6e51f07f915fdfdd83))
|
||||
@@ -1,76 +0,0 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||
level of experience, education, socio-economic status, nationality, personal
|
||||
appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at hello@getdoks.org. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
https://www.contributor-covenant.org/faq
|
||||
@@ -1,7 +0,0 @@
|
||||
FROM nginx:alpine
|
||||
|
||||
COPY nginx.conf /etc/nginx/nginx.conf
|
||||
COPY public /usr/share/nginx/html
|
||||
|
||||
EXPOSE 80
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
||||
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020-2021 Gridsome, Henk Verlinde
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -1,40 +0,0 @@
|
||||
# Kerberos Documentation
|
||||
|
||||
And so it began. The documentation of the entire Kerberos.io ecosystem.
|
||||
|
||||
Master branch
|
||||
> [doc.kerberos.io](https://doc.kerberos.io)
|
||||
|
||||
Develop branch
|
||||
> [staging.doc.kerberos.live](https://staging.doc.kerberos.live)
|
||||
|
||||
## Development
|
||||
|
||||
Install dependencies
|
||||
|
||||
$ yarn install
|
||||
|
||||
Run Hugo dev server with auto compile of assets
|
||||
|
||||
$ yarn start
|
||||
|
||||
## Formatting notes
|
||||
|
||||
**YouTube/Vimeo**
|
||||
|
||||
Using Hugo's built-in video shortcodes ([source](https://gohugo.io/content-management/shortcodes/#vimeo)):
|
||||
|
||||
{{< vimeo id="146022717" class="responsive-video ratio-16by10" title="My vimeo video" >}}
|
||||
{{< youtube id="w7Ft2ymGmfc" title="A New Hugo Site in Under Two Minutes" >}}
|
||||
|
||||
- keep the `responsive-video` class intact
|
||||
- use `ratio-16by10` or `ratio-4by3` class to fix aspect ratio if video is different than 16:9
|
||||
|
||||
## TODO
|
||||
|
||||
- config/_default/params.toml
|
||||
- [ ] open:graph image
|
||||
- [ ] schema logo
|
||||
|
||||
- nice to haves:
|
||||
- [ ] transform colors to CSS vars (and use for easier dark mode)
|
||||
@@ -0,0 +1 @@
|
||||
# redirects for Netlify - https://www.netlify.com/docs/redirects/
|
||||
@@ -1,13 +0,0 @@
|
||||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
description: ""
|
||||
lead: ""
|
||||
date: {{ .Date }}
|
||||
lastmod: {{ .Date }}
|
||||
draft: true
|
||||
weight: 50
|
||||
images: ["{{ .Name | urlize }}.jpg"]
|
||||
contributors: []
|
||||
---
|
||||
|
||||
{{< img src="{{ .Name | urlize }}.jpg" alt="{{ replace .Name "-" " " | title }}" caption="{{ replace .Name "-" " " | title }}" class="wide" >}}
|
||||
@@ -1,8 +0,0 @@
|
||||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
description: ""
|
||||
date: {{ .Date }}
|
||||
lastmod: {{ .Date }}
|
||||
draft: true
|
||||
images: []
|
||||
---
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
description: ""
|
||||
lead: ""
|
||||
date: {{ .Date }}
|
||||
lastmod: {{ .Date }}
|
||||
draft: true
|
||||
images: []
|
||||
menu:
|
||||
docs:
|
||||
parent: ""
|
||||
weight: 999
|
||||
toc: true
|
||||
---
|
||||
|
||||
{{< img src="{{ .Name | urlize }}.jpg" alt="{{ replace .Name "-" " " | title }}" caption="{{ replace .Name "-" " " | title }}" >}}
|
||||
@@ -1,3 +0,0 @@
|
||||
function random(){
|
||||
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
import 'bootstrap/dist/js/bootstrap.bundle.min.js'
|
||||
// import 'bootstrap/dist/js/bootstrap.min.js'
|
||||
@@ -1,18 +0,0 @@
|
||||
import Clipboard from 'clipboard';
|
||||
|
||||
var clipboard = new Clipboard('.btn-clipboard');
|
||||
|
||||
clipboard.on('success', function(e) {
|
||||
/*
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
*/
|
||||
|
||||
e.clearSelection();
|
||||
});
|
||||
|
||||
clipboard.on('error', function(e) {
|
||||
console.error('Action:', e.action);
|
||||
console.error('Trigger:', e.trigger);
|
||||
});
|
||||
@@ -1,12 +0,0 @@
|
||||
document.getElementById('mode').addEventListener('click', () => {
|
||||
|
||||
document.body.classList.toggle('dark');
|
||||
localStorage.setItem('theme', document.body.classList.contains('dark') ? 'dark' : 'light');
|
||||
|
||||
});
|
||||
|
||||
if (localStorage.getItem('theme') === 'dark') {
|
||||
|
||||
document.body.classList.add('dark');
|
||||
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
import hljs from 'highlight.js/lib/core';
|
||||
|
||||
import javascript from 'highlight.js/lib/languages/javascript';
|
||||
import json from 'highlight.js/lib/languages/json';
|
||||
import bash from 'highlight.js/lib/languages/bash';
|
||||
import htmlbars from 'highlight.js/lib/languages/htmlbars';
|
||||
import ini from 'highlight.js/lib/languages/ini';
|
||||
import yaml from 'highlight.js/lib/languages/yaml';
|
||||
import markdown from 'highlight.js/lib/languages/markdown';
|
||||
|
||||
hljs.registerLanguage('javascript', javascript);
|
||||
hljs.registerLanguage('json', json);
|
||||
hljs.registerLanguage('bash', bash);
|
||||
hljs.registerLanguage('html', htmlbars);
|
||||
hljs.registerLanguage('ini', ini);
|
||||
hljs.registerLanguage('toml', ini);
|
||||
hljs.registerLanguage('yaml', yaml);
|
||||
hljs.registerLanguage('md', markdown);
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
document.querySelectorAll('pre code').forEach((block) => {
|
||||
hljs.highlightElement(block);
|
||||
});
|
||||
});
|
||||
@@ -1,146 +0,0 @@
|
||||
var suggestions = document.getElementById('suggestions');
|
||||
var userinput = document.getElementById('userinput');
|
||||
|
||||
document.addEventListener('keydown', inputFocus);
|
||||
|
||||
function inputFocus(e) {
|
||||
|
||||
if (e.keyCode === 191 ) {
|
||||
e.preventDefault();
|
||||
userinput.focus();
|
||||
}
|
||||
|
||||
if (e.keyCode === 27 ) {
|
||||
userinput.blur();
|
||||
suggestions.classList.add('d-none');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
document.addEventListener('click', function(event) {
|
||||
|
||||
var isClickInsideElement = suggestions.contains(event.target);
|
||||
|
||||
if (!isClickInsideElement) {
|
||||
suggestions.classList.add('d-none');
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
/*
|
||||
Source:
|
||||
- https://dev.to/shubhamprakash/trap-focus-using-javascript-6a3
|
||||
*/
|
||||
|
||||
document.addEventListener('keydown',suggestionFocus);
|
||||
|
||||
function suggestionFocus(e){
|
||||
|
||||
const focusableSuggestions= suggestions.querySelectorAll('a');
|
||||
const focusable= [...focusableSuggestions];
|
||||
const index = focusable.indexOf(document.activeElement);
|
||||
|
||||
let nextIndex = 0;
|
||||
|
||||
if (e.keyCode === 38) {
|
||||
e.preventDefault();
|
||||
nextIndex= index > 0 ? index-1 : 0;
|
||||
focusableSuggestions[nextIndex].focus();
|
||||
}
|
||||
else if (e.keyCode === 40) {
|
||||
e.preventDefault();
|
||||
nextIndex= index+1 < focusable.length ? index+1 : index;
|
||||
focusableSuggestions[nextIndex].focus();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Source:
|
||||
- https://github.com/nextapps-de/flexsearch#index-documents-field-search
|
||||
- https://raw.githack.com/nextapps-de/flexsearch/master/demo/autocomplete.html
|
||||
*/
|
||||
|
||||
(function(){
|
||||
|
||||
var index = new FlexSearch({
|
||||
preset: 'score',
|
||||
cache: true,
|
||||
doc: {
|
||||
id: 'id',
|
||||
field: [
|
||||
'title',
|
||||
'description',
|
||||
'content',
|
||||
],
|
||||
store: [
|
||||
'href',
|
||||
'title',
|
||||
'description',
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
var docs = [
|
||||
{{ range $index, $page := .Site.Pages -}}
|
||||
{
|
||||
id: {{ $index }},
|
||||
href: "{{ .RelPermalink | relURL }}",
|
||||
title: {{ .Title | jsonify }},
|
||||
description: {{ .Params.description | jsonify }},
|
||||
content: {{ .Content | jsonify }}
|
||||
},
|
||||
{{ end -}}
|
||||
];
|
||||
|
||||
index.add(docs);
|
||||
|
||||
userinput.addEventListener('input', show_results, true);
|
||||
suggestions.addEventListener('click', accept_suggestion, true);
|
||||
|
||||
function show_results(){
|
||||
|
||||
var value = this.value;
|
||||
var results = index.search(value, 5);
|
||||
var entry, childs = suggestions.childNodes;
|
||||
var i = 0, len = results.length;
|
||||
|
||||
suggestions.classList.remove('d-none');
|
||||
|
||||
results.forEach(function(page) {
|
||||
|
||||
entry = document.createElement('div');
|
||||
|
||||
entry.innerHTML = '<a href><span></span><span></span></a>';
|
||||
|
||||
a = entry.querySelector('a'),
|
||||
t = entry.querySelector('span:first-child'),
|
||||
d = entry.querySelector('span:nth-child(2)');
|
||||
|
||||
a.href = page.href;
|
||||
t.textContent = page.title;
|
||||
d.textContent = page.description;
|
||||
|
||||
suggestions.appendChild(entry);
|
||||
|
||||
});
|
||||
|
||||
while(childs.length > len){
|
||||
|
||||
suggestions.removeChild(childs[i])
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function accept_suggestion(){
|
||||
|
||||
while(suggestions.lastChild){
|
||||
|
||||
suggestions.removeChild(suggestions.lastChild);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}());
|
||||
@@ -1 +0,0 @@
|
||||
import 'instant.page';
|
||||
@@ -1 +0,0 @@
|
||||
import 'lazysizes';
|
||||
@@ -1,11 +0,0 @@
|
||||
exports.handler = (event, context, callback) => {
|
||||
callback (null, {
|
||||
statusCode: 200,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({
|
||||
message: 'Hi from Lambda.',
|
||||
}),
|
||||
});
|
||||
}
|
||||
@@ -1,127 +0,0 @@
|
||||
:root {
|
||||
|
||||
// ---------- COLORS ---------- //
|
||||
/*
|
||||
Usage:
|
||||
- regular colors: "color: var(--hub);"
|
||||
- transparent colors: "color: hsla(var(--hub-hsl), 0.3);" (mind the "-hsl" suffix in variable)
|
||||
*/
|
||||
|
||||
--hub: hsl(278, 30%, 48%);
|
||||
--hub-hsl: 278, 30%, 48%;
|
||||
--hub-darker: hsl(278, 34%, 31%);
|
||||
--hub-darker-hsl: 278, 34%, 31%;
|
||||
--oss: hsl(2, 48%, 39%);
|
||||
--oss-hsl: 2, 48%, 39%;
|
||||
--oss-darker: hsl(2, 52%, 25%);
|
||||
--oss-darker-hsl: 2, 52%, 25%;
|
||||
--enterprise: hsl(162, 24%, 38%);
|
||||
--enterprise-hsl: 162, 24%, 38%;
|
||||
--enterprise-darker: hsl(162, 26%, 26%);
|
||||
--enterprise-darker-hsl: 162, 26%, 26%;
|
||||
--vault: hsl(229, 25%, 45%);
|
||||
--vault-hsl: 229, 25%, 45%;
|
||||
--vault-darker: hsl(230, 28%, 31%);
|
||||
--vault-darker-hsl: 230, 28%, 31%;
|
||||
|
||||
--secondary: hsl(0, 3%, 41%);
|
||||
--secondary-hsl: 0, 3%, 41%;
|
||||
--secondary-darker: hsl(0, 3%, 48%);
|
||||
--secondary-darker-hsl: 0, 3%, 48%;
|
||||
|
||||
--text: hsl(0, 3%, 15%);
|
||||
--text-hsl: 0, 3%, 15%;
|
||||
--text-muted: hsl(0, 3%, 41%);
|
||||
--text-muted-hsl: 0, 3%, 41%;
|
||||
--text-light: hsl(0, 5%, 63%);
|
||||
--text-light-hsl: 0, 5%, 63%;
|
||||
|
||||
--card: hsl(0, 0%, 100%);
|
||||
--card-hsl: 0, 0%, 100%;
|
||||
--card-muted: hsl(0, 0%, 98%);
|
||||
--card-muted-hsl: 0, 0%, 98%;
|
||||
|
||||
--info: hsl(205, 74%, 53%);
|
||||
--info-hsl: 205, 74%, 53%;
|
||||
--success: hsl(131, 31%, 52%);
|
||||
--success-hsl: 131, 31%, 52%;
|
||||
--warning: hsl(47, 86%, 47%);
|
||||
--warning-hsl: 47, 86%, 47%;
|
||||
--alert: hsl(2, 58%, 48%);
|
||||
--alert-hsl: 2, 58%, 48%;
|
||||
|
||||
--bg: hsl(0, 5%, 93%);
|
||||
--bg-hsl: 0, 5%, 93%;
|
||||
--bg-muted: hsl(0, 4%, 89%);
|
||||
--bg-muted-hsl: 0, 4%, 89%;
|
||||
--bg-white: hsl(0, 0%, 100%);
|
||||
--bg-white-hsl: 0, 0%, 100%;
|
||||
|
||||
body.dark {
|
||||
--hub: hsl(200, 93%, 77%);
|
||||
--hub-hsl: 200, 93%, 77%;
|
||||
|
||||
--text-muted: hsl(210, 14%, 89%);
|
||||
--text-muted-hsl: 210, 14%, 89%;
|
||||
|
||||
--card: hsl(206, 8%, 18%);
|
||||
--card-hsl: 206, 8%, 18%;
|
||||
--card-muted: hsl(206, 8%, 16%);
|
||||
--card-muted-hsl: 206, 8%, 16%;
|
||||
|
||||
--bg: hsl(210, 11%, 15%);
|
||||
--bg-hsl: 210, 11%, 15%;
|
||||
}
|
||||
|
||||
// ---------- UI ---------- //
|
||||
|
||||
--radius: 4px;
|
||||
|
||||
// default padding for cards ("V" for vertical, "H" for horizontal)
|
||||
--card-paddingV: #{size(2)}; // interpolate to embed the result in CSS var
|
||||
--card-paddingH: #{size(1)};
|
||||
@include break(t) {
|
||||
--card-paddingV: #{size(2)};
|
||||
--card-paddingH: #{size(2)};
|
||||
}
|
||||
@include break(d) {
|
||||
--card-paddingV: #{size(3)};
|
||||
--card-paddingH: #{size(3)};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// ========== PLACEHOLDERS ========== //
|
||||
/*
|
||||
Usage:
|
||||
@extend %box-shadow;
|
||||
*/
|
||||
|
||||
%card-header-shadow {
|
||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.07);
|
||||
}
|
||||
|
||||
%card-footer-shadow {
|
||||
box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.07) inset;
|
||||
}
|
||||
|
||||
%box-shadow {
|
||||
box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.03);
|
||||
}
|
||||
|
||||
%box-shadow-bigger {
|
||||
box-shadow: 0px 4px 34px rgba(0, 0, 0, 0.04), 0px 3px 4px rgba(0, 0, 0, 0.1);
|
||||
border-radius: var(--radius);
|
||||
}
|
||||
|
||||
%modal-shadow {
|
||||
box-shadow: 0px 4px 34px rgba(0, 0, 0, 0.24), 0px 3px 4px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
%tfx {
|
||||
transition: all 0.15s;
|
||||
@media (prefers-reduced-motion) {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
@@ -1,147 +0,0 @@
|
||||
/*! doc.kerberos.io v2.0.0 | MIT License */
|
||||
|
||||
// ----- Basics & Typography ----- //
|
||||
|
||||
body {
|
||||
font-family: 'Inter', sans-serif; // use regular Inter font by default..
|
||||
@supports (font-variation-settings: normal) {
|
||||
font-family: 'Inter var', sans-serif; // ..but if supported, use variable Inter font instead (all-in-one)
|
||||
}
|
||||
color: var(--text-muted);
|
||||
background: var(--bg);
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-weight: 600;
|
||||
color: var(--text);
|
||||
body.dark & {
|
||||
color: var(--bg-white);
|
||||
}
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 24px;
|
||||
line-height: size(3);
|
||||
@include break(t) {
|
||||
font-size: 30px;
|
||||
line-height: size(4);
|
||||
}
|
||||
@include break(w) {
|
||||
font-size: 36px;
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 24px;
|
||||
line-height: size(2.5);
|
||||
@include break(w) {
|
||||
font-size: 30px;
|
||||
line-height: size(4);
|
||||
}
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 20px;
|
||||
line-height: size(2);
|
||||
@include break(w) { font-size: 24px; line-height: size(3); }
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 16px;
|
||||
line-height: size(2);
|
||||
@include break(w) { font-size: 18px; line-height: size(3); }
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 15px;
|
||||
line-height: size(2);
|
||||
margin: 0 0 size(1);
|
||||
@include break(w) {
|
||||
font-size: 16px;
|
||||
line-height: size(2.5);
|
||||
}
|
||||
&.lead {
|
||||
color: var(--text-light);
|
||||
margin: size(-1) 0 size(2);
|
||||
font-size: 18px;
|
||||
line-height: size(2);
|
||||
@include break(d) {
|
||||
margin: size(-1.5) 0 size(2);
|
||||
}
|
||||
@include break(w) {
|
||||
font-size: 22px;
|
||||
line-height: size(3);
|
||||
}
|
||||
}
|
||||
}
|
||||
strong {
|
||||
font-weight: 550;
|
||||
color: var(--text);
|
||||
body.dark & {
|
||||
color: var(--bg-white);
|
||||
}
|
||||
}
|
||||
|
||||
li {
|
||||
font-size: 15px;
|
||||
line-height: size(2);
|
||||
@include break(w) {
|
||||
font-size: 16px;
|
||||
line-height: size(2.5);
|
||||
}
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 2.5rem 0;
|
||||
opacity: 0.1;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
|
||||
// ----- UI ----- //
|
||||
|
||||
.responsive-video {
|
||||
position: relative;
|
||||
padding-bottom: 56.25%;
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
margin: 2rem 0 0;
|
||||
border-radius: var(--radius);
|
||||
&.ratio-16by10 { padding-bottom: 62.5%; }
|
||||
&.ratio-4by3 { padding-bottom: 75%; }
|
||||
iframe {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border: 0;
|
||||
}
|
||||
}
|
||||
|
||||
// ----- Layout ----- //
|
||||
|
||||
.navbar {
|
||||
.navbar-nav {
|
||||
.nav-link {
|
||||
color: var(--text-muted);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.footer {
|
||||
box-shadow: 0 -4px 34px rgba(0, 0, 0, 0.04), 0 -3px 4px rgba(0, 0, 0, 0.1);
|
||||
background: var(--card);
|
||||
// copyright with social links
|
||||
.navbar-nav {
|
||||
margin-top: 1rem;
|
||||
@include break-from(992px) { margin: 0; }
|
||||
.copyright {
|
||||
margin-right: 1rem;
|
||||
}
|
||||
}
|
||||
li { margin-bottom: 0; }
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
/** Import Bootstrap functions */
|
||||
@import "bootstrap/scss/functions";
|
||||
|
||||
/** Import theme variables */
|
||||
@import "common/variables";
|
||||
|
||||
/** Import Bootstrap */
|
||||
@import "bootstrap/scss/bootstrap";
|
||||
|
||||
/** Import highlight.js */
|
||||
// @import "highlight.js/scss/dracula";
|
||||
|
||||
/** Import theme styles */
|
||||
@import "common/fonts";
|
||||
@import "common/global";
|
||||
@import "common/dark";
|
||||
@import "components/doks";
|
||||
// @import "components/syntax";
|
||||
@import "components/code";
|
||||
@import "components/alerts";
|
||||
@import "components/buttons";
|
||||
@import "components/comments";
|
||||
@import "components/forms";
|
||||
@import "components/images";
|
||||
@import "components/search";
|
||||
@import "components/tables";
|
||||
@import "layouts/footer";
|
||||
@import "layouts/header";
|
||||
@import "layouts/pages";
|
||||
@import "layouts/posts";
|
||||
@import "layouts/sidebar";
|
||||
|
||||
/* Kerberos tweaks & branding */
|
||||
@import "kerberos-config";
|
||||
@import "kerberos";
|
||||
@@ -1,330 +0,0 @@
|
||||
/** Theme variables */
|
||||
|
||||
// Source: https://material.io/design/color/dark-theme.html
|
||||
|
||||
$body-bg-dark: $gray-900;
|
||||
$body-overlay-dark: darken($body-bg-dark, 2.5%);
|
||||
$border-dark: darken($body-bg-dark, 2.5%);
|
||||
$body-color-dark: $gray-300;
|
||||
$dots-dark: darken($body-color-dark, 50%);
|
||||
|
||||
$link-color-dark: $blue-300;
|
||||
$button-color-dark: $link-color-dark;
|
||||
$focus-color-dark: lighten($link-color-dark, 2.5%);
|
||||
|
||||
$navbar-dark-color: $body-color-dark;
|
||||
$navbar-dark-hover-color: $link-color-dark;
|
||||
$navbar-dark-active-color: $link-color-dark;
|
||||
|
||||
/** Theme styles */
|
||||
|
||||
body.dark a {
|
||||
color: $link-color-dark;
|
||||
}
|
||||
|
||||
body.dark a.text-body {
|
||||
color: $body-color-dark !important;
|
||||
}
|
||||
|
||||
body.dark .btn-primary {
|
||||
@include button-variant($button-color-dark, $button-color-dark);
|
||||
|
||||
color: $body-bg-dark !important;
|
||||
}
|
||||
|
||||
body.dark .btn-outline-primary {
|
||||
@include button-outline-variant($button-color-dark, $button-color-dark);
|
||||
|
||||
color: $link-color-dark;
|
||||
}
|
||||
|
||||
body.dark .btn-outline-primary:hover {
|
||||
color: $body-bg-dark;
|
||||
}
|
||||
|
||||
/*
|
||||
body.dark .navbar {
|
||||
background: $body-bg-dark;
|
||||
opacity: 0.975;
|
||||
border-bottom: 1px solid $border-dark;
|
||||
}
|
||||
*/
|
||||
|
||||
body.dark.home .navbar {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
body.dark .navbar-light .navbar-brand {
|
||||
color: $navbar-dark-color !important;
|
||||
}
|
||||
|
||||
body.dark .navbar-light .navbar-nav .nav-link {
|
||||
color: $navbar-dark-color;
|
||||
}
|
||||
|
||||
body.dark .navbar-light .navbar-nav .nav-link:hover,
|
||||
body.dark .navbar-light .navbar-nav .nav-link:focus {
|
||||
color: $navbar-dark-hover-color;
|
||||
}
|
||||
|
||||
body.dark .navbar-light .navbar-nav .nav-link.disabled {
|
||||
color: $navbar-dark-disabled-color;
|
||||
}
|
||||
|
||||
body.dark .navbar-light .navbar-nav .show > .nav-link,
|
||||
body.dark .navbar-light .navbar-nav .active > .nav-link,
|
||||
body.dark .navbar-light .navbar-nav .nav-link.show,
|
||||
body.dark .navbar-light .navbar-nav .nav-link.active {
|
||||
color: $navbar-dark-active-color;
|
||||
}
|
||||
|
||||
body.dark .navbar-light .navbar-text {
|
||||
color: $navbar-dark-color;
|
||||
}
|
||||
|
||||
body.dark .alert-primary a {
|
||||
color: $body-bg-dark;
|
||||
}
|
||||
|
||||
body.dark .alert-warning {
|
||||
background: $body-overlay-dark;
|
||||
color: $body-color-dark;
|
||||
}
|
||||
|
||||
body.dark .page-links a {
|
||||
color: $body-color-dark;
|
||||
}
|
||||
|
||||
body.dark .showcase-meta a {
|
||||
color: $body-color-dark;
|
||||
}
|
||||
|
||||
body.dark .showcase-meta a:hover,
|
||||
body.dark .showcase-meta a:focus {
|
||||
color: $link-color-dark;
|
||||
}
|
||||
|
||||
body.dark .docs-link:hover,
|
||||
body.dark .docs-link.active,
|
||||
body.dark .page-links a:hover {
|
||||
text-decoration: none;
|
||||
color: $link-color-dark;
|
||||
}
|
||||
|
||||
body.dark .navbar-light .navbar-text a {
|
||||
color: $navbar-dark-active-color;
|
||||
}
|
||||
|
||||
body.dark .docs-links h3.sidebar-link a,
|
||||
body.dark .page-links h3.sidebar-link a {
|
||||
color: $body-color-dark;
|
||||
}
|
||||
|
||||
body.dark .navbar-light .navbar-text a:hover,
|
||||
body.dark .navbar-light .navbar-text a:focus {
|
||||
color: $navbar-dark-active-color;
|
||||
}
|
||||
|
||||
body.dark .navbar .btn-link {
|
||||
color: $navbar-dark-color;
|
||||
}
|
||||
|
||||
body.dark .content .btn-link {
|
||||
color: $link-color-dark;
|
||||
}
|
||||
|
||||
body.dark .content .btn-link:hover {
|
||||
color: $link-color-dark;
|
||||
}
|
||||
|
||||
body.dark .navbar .btn-link:hover {
|
||||
color: $navbar-dark-hover-color;
|
||||
}
|
||||
|
||||
body.dark .navbar .btn-link:active {
|
||||
color: $navbar-dark-active-color;
|
||||
}
|
||||
|
||||
body.dark .form-control.is-search {
|
||||
background: $body-overlay-dark;
|
||||
|
||||
/*
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%236c757d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-search'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");
|
||||
background-repeat: no-repeat;
|
||||
background-position: right calc(0.375em + 0.1875rem) center;
|
||||
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
|
||||
*/
|
||||
}
|
||||
|
||||
body.dark .navbar-form::after {
|
||||
color: $gray-600;
|
||||
border: 1px solid $gray-800;
|
||||
}
|
||||
|
||||
body.dark .form-control {
|
||||
color: $gray-500;
|
||||
}
|
||||
|
||||
body.dark .form-control:focus {
|
||||
box-shadow: 0 0 0 0.2rem $focus-color-dark;
|
||||
}
|
||||
|
||||
body.dark .border-top {
|
||||
border-top: 1px solid $border-dark !important;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
body.dark .docs-sidebar {
|
||||
order: 0;
|
||||
border-right: 1px solid $border-dark;
|
||||
}
|
||||
}
|
||||
|
||||
body.dark .docs-navigation {
|
||||
border-top: 1px solid $border-dark;
|
||||
}
|
||||
|
||||
body.dark pre code::-webkit-scrollbar-thumb {
|
||||
background: $border-dark;
|
||||
}
|
||||
|
||||
body.dark code:not(.hljs) {
|
||||
background: $body-overlay-dark;
|
||||
color: $body-color-dark;
|
||||
}
|
||||
|
||||
body.dark pre code:hover {
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: $border-dark transparent;
|
||||
}
|
||||
|
||||
body.dark pre code::-webkit-scrollbar-thumb:hover {
|
||||
background: $border-dark;
|
||||
}
|
||||
|
||||
body.dark blockquote {
|
||||
border-left: 3px solid $border-dark;
|
||||
}
|
||||
|
||||
body.dark .footer {
|
||||
border-top: 1px solid $border-dark;
|
||||
}
|
||||
|
||||
body.dark .docs-links,
|
||||
body.dark .docs-toc {
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: $body-bg-dark $body-bg-dark;
|
||||
}
|
||||
|
||||
body.dark .docs-links::-webkit-scrollbar,
|
||||
body.dark .docs-toc::-webkit-scrollbar {
|
||||
width: 5px;
|
||||
}
|
||||
|
||||
body.dark .docs-links::-webkit-scrollbar-track,
|
||||
body.dark .docs-toc::-webkit-scrollbar-track {
|
||||
background: $body-bg-dark;
|
||||
}
|
||||
|
||||
body.dark .docs-links::-webkit-scrollbar-thumb,
|
||||
body.dark .docs-toc::-webkit-scrollbar-thumb {
|
||||
background: $body-bg-dark;
|
||||
}
|
||||
|
||||
body.dark .docs-links:hover,
|
||||
body.dark .docs-toc:hover {
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: $border-dark $body-bg-dark;
|
||||
}
|
||||
|
||||
body.dark .docs-links:hover::-webkit-scrollbar-thumb,
|
||||
body.dark .docs-toc:hover::-webkit-scrollbar-thumb {
|
||||
background: $border-dark;
|
||||
}
|
||||
|
||||
body.dark .docs-links::-webkit-scrollbar-thumb:hover,
|
||||
body.dark .docs-toc::-webkit-scrollbar-thumb:hover {
|
||||
background: $border-dark;
|
||||
}
|
||||
|
||||
body.dark .docs-links h3:not(:first-child) {
|
||||
border-top: 1px solid $border-dark;
|
||||
}
|
||||
|
||||
body.dark a.docs-link {
|
||||
color: $body-color-dark;
|
||||
}
|
||||
|
||||
body.dark .page-links li:not(:first-child) {
|
||||
border-top: 1px dashed $border-dark;
|
||||
}
|
||||
|
||||
body.dark .card {
|
||||
background: $body-bg-dark;
|
||||
border: 1px solid $border-dark;
|
||||
}
|
||||
|
||||
body.dark .card.bg-light {
|
||||
background: $body-overlay-dark !important;
|
||||
}
|
||||
|
||||
body.dark .navbar .menu-icon .navicon {
|
||||
background: $navbar-dark-color;
|
||||
}
|
||||
|
||||
body.dark .navbar .menu-icon .navicon::before,
|
||||
body.dark .navbar .menu-icon .navicon::after {
|
||||
background: $navbar-dark-color;
|
||||
}
|
||||
|
||||
body.dark .logo-light {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
body.dark .logo-dark {
|
||||
display: inline-block !important;
|
||||
}
|
||||
|
||||
body.dark .bg-light {
|
||||
background: darken($body-bg-dark, 1.5%) !important;
|
||||
}
|
||||
|
||||
body.dark .bg-dots {
|
||||
background-image: radial-gradient($dots-dark 15%, transparent 15%);
|
||||
}
|
||||
|
||||
body.dark .text-muted {
|
||||
color: darken($body-color-dark, 7.5%) !important;
|
||||
}
|
||||
|
||||
body.dark .alert-primary {
|
||||
background: $link-color-dark;
|
||||
color: $body-bg-dark;
|
||||
}
|
||||
|
||||
body.dark .figure-caption {
|
||||
color: $body-color-dark;
|
||||
}
|
||||
|
||||
body.dark table {
|
||||
@extend .table-dark;
|
||||
}
|
||||
|
||||
body.dark .copy-status::after {
|
||||
content: "Copy";
|
||||
display: block;
|
||||
color: $body-color-dark;
|
||||
}
|
||||
|
||||
body.dark .copy-status:hover::after {
|
||||
content: "Copy";
|
||||
display: block;
|
||||
color: $link-color-dark;
|
||||
}
|
||||
|
||||
body.dark .copy-status:focus::after,
|
||||
body.dark .copy-status:active::after {
|
||||
content: "Copied";
|
||||
display: block;
|
||||
color: $link-color-dark;
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
/*
|
||||
Self-hosted fonts
|
||||
*/
|
||||
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url("fonts/Inter-Regular.woff2?v=3.18") format("woff2"),
|
||||
url("fonts/Inter-Regular.woff?v=3.18") format("woff");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-display: swap;
|
||||
src: url("fonts/Inter-Medium.woff2?v=3.18") format("woff2"),
|
||||
url("fonts/Inter-Medium.woff?v=3.18") format("woff");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
font-display: swap;
|
||||
src: url("fonts/Inter-SemiBold.woff2?v=3.18") format("woff2"),
|
||||
url("fonts/Inter-SemiBold.woff?v=3.18") format("woff");
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------
|
||||
Variable font.
|
||||
Usage:
|
||||
|
||||
body {
|
||||
font-family: 'Inter', sans-serif; // use regular Inter font by default..
|
||||
@supports (font-variation-settings: normal) {
|
||||
font-family: 'Inter var', sans-serif; // ..but if supported, use variable Inter font instead (all-in-one)
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
@font-face {
|
||||
font-family: 'Inter var';
|
||||
font-weight: 100 900;
|
||||
font-display: swap;
|
||||
font-style: normal;
|
||||
font-named-instance: 'Regular';
|
||||
src: url("fonts/Inter-roman.var.woff2?v=3.18") format("woff2");
|
||||
}
|
||||
@@ -1,236 +0,0 @@
|
||||
.contributors .content,
|
||||
.blog .content,
|
||||
.page .content,
|
||||
.error404 .content,
|
||||
.docs.list .content,
|
||||
.tutorial.list .content,
|
||||
.showcase.list .content {
|
||||
padding-top: 1rem;
|
||||
padding-bottom: 3rem;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
.h1,
|
||||
.h2,
|
||||
.h3,
|
||||
.h4,
|
||||
.h5,
|
||||
.h6 {
|
||||
margin: 2.5rem 0 1rem;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
body {
|
||||
font-size: $font-size-md;
|
||||
padding-top: 4rem !important;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
.h1,
|
||||
.h2,
|
||||
.h3,
|
||||
.h4,
|
||||
.h5,
|
||||
.h6 {
|
||||
margin-bottom: 1.125rem;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
.home h1 {
|
||||
font-size: calc(1.875rem + 1.5vw);
|
||||
}
|
||||
*/
|
||||
|
||||
a:hover,
|
||||
a:focus {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a.btn:hover,
|
||||
a.btn:focus {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.section {
|
||||
padding-top: 5rem;
|
||||
padding-bottom: 5rem;
|
||||
}
|
||||
|
||||
.section-md {
|
||||
padding-top: 3rem;
|
||||
padding-bottom: 3rem;
|
||||
}
|
||||
|
||||
.section-sm {
|
||||
padding-top: 1rem;
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
/*
|
||||
.section svg {
|
||||
display: inline-block;
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
vertical-align: text-top;
|
||||
}
|
||||
*/
|
||||
|
||||
body {
|
||||
padding-top: 3.5625rem;
|
||||
}
|
||||
|
||||
.docs-sidebar {
|
||||
order: 2;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
.docs-sidebar {
|
||||
order: 0;
|
||||
//border-right: 2px solid var(--bg-muted);
|
||||
}
|
||||
|
||||
@supports ((position:-webkit-sticky) or (position:sticky)) {
|
||||
.docs-sidebar {
|
||||
position: -webkit-sticky;
|
||||
position: sticky;
|
||||
top: 4rem;
|
||||
z-index: 1000;
|
||||
height: calc(100vh - 4rem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(xl) {
|
||||
.docs-sidebar {
|
||||
flex: 0 1 320px;
|
||||
}
|
||||
}
|
||||
|
||||
.docs-links {
|
||||
padding-bottom: 5rem;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
@supports ((position: -webkit-sticky) or (position: sticky)) {
|
||||
.docs-links {
|
||||
max-height: calc(100vh - 4rem);
|
||||
overflow-y: scroll;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
.docs-links {
|
||||
display: block;
|
||||
width: auto;
|
||||
margin-right: -1.5rem;
|
||||
padding-bottom: 4rem;
|
||||
}
|
||||
}
|
||||
|
||||
.docs-toc {
|
||||
order: 2;
|
||||
}
|
||||
|
||||
@supports ((position:-webkit-sticky) or (position:sticky)) {
|
||||
.docs-toc {
|
||||
position: -webkit-sticky;
|
||||
position: sticky;
|
||||
top: 4rem;
|
||||
height: calc(100vh - 4rem);
|
||||
overflow-y: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.docs-content {
|
||||
@extend %box-shadow-bigger;
|
||||
padding-bottom: 3rem;
|
||||
order: 1;
|
||||
background: var(--card-muted);
|
||||
border-radius: var(--radius);
|
||||
@include break(d) {
|
||||
padding: 0 size(4) size(2);
|
||||
margin: size(4) 0;
|
||||
}
|
||||
a {
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
.docs-navigation {
|
||||
border-top: 1px solid $gray-200;
|
||||
margin-top: 2rem;
|
||||
margin-bottom: 0;
|
||||
padding-top: 2rem;
|
||||
}
|
||||
|
||||
.docs-navigation a {
|
||||
font-size: $font-size-base * 0.9;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
.docs-navigation {
|
||||
margin-bottom: -1rem;
|
||||
}
|
||||
|
||||
.docs-navigation a {
|
||||
font-size: $font-size-base;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar a:hover,
|
||||
.navbar a:focus {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#TableOfContents ul {
|
||||
padding-left: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
::selection {
|
||||
background: rgba(212, 53, 159, 0.2);
|
||||
}
|
||||
|
||||
.bg-dots {
|
||||
background-image: radial-gradient($gray-300 15%, transparent 15%);
|
||||
background-position: 0 0;
|
||||
background-size: 1rem 1rem;
|
||||
-webkit-mask: linear-gradient(to top, #fff, transparent);
|
||||
mask: linear-gradient(to top, #fff, transparent);
|
||||
width: 100%;
|
||||
height: 9rem;
|
||||
margin-top: -10rem;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.bg-dots-md {
|
||||
margin-top: -11rem;
|
||||
}
|
||||
|
||||
.bg-dots-lg {
|
||||
margin-top: -12rem;
|
||||
}
|
||||
|
||||
// https://fossheim.io/writing/posts/css-text-gradient/
|
||||
.gradient-text {
|
||||
background-color: $primary;
|
||||
background-image: linear-gradient(90deg, $primary, $blue-300 50%, $pink-500);
|
||||
background-size: 100%;
|
||||
background-repeat: repeat;
|
||||
-webkit-background-clip: text;
|
||||
-moz-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
-moz-text-fill-color: transparent;
|
||||
}
|
||||
@@ -1,226 +0,0 @@
|
||||
/*
|
||||
Override SASS' handling of HSL(a) color functions, don't touch it and let CSS handle it itself.
|
||||
This will enable the trick with variable alpha channels for CSS color variables (see below).
|
||||
*/
|
||||
@function hsla($args...) { @return #{'hsla(#{$args})'}; }
|
||||
|
||||
/*
|
||||
Function for defining (not only) vertical rhythm by multiplies of 12px
|
||||
Examples:
|
||||
width: size(2); (equals to "width: 24px;")
|
||||
line-height: size(3); (equals to "line-height: 36px;")
|
||||
*/
|
||||
@function size($multiplier) {
|
||||
@return $multiplier * 12px;
|
||||
}
|
||||
|
||||
// ----- Mixins ----- //
|
||||
|
||||
// Bootstrap breakpoints
|
||||
$gap: 32px;
|
||||
$tablet: 768px;
|
||||
$desktop: 992px;
|
||||
$widescreen: 1200px;
|
||||
$fullhd: 1400px;
|
||||
|
||||
|
||||
// Responsive mixin (Bulma's)
|
||||
@mixin break($media) {
|
||||
@if $media == t {
|
||||
@media only screen and (min-width: $tablet) { @content; }
|
||||
}
|
||||
@else if $media == d {
|
||||
@media only screen and (min-width: $desktop) { @content; }
|
||||
}
|
||||
@else if $media == w {
|
||||
@media only screen and (min-width: $widescreen) { @content; }
|
||||
}
|
||||
@else if $media == f {
|
||||
@media only screen and (min-width: $fullhd) { @content; }
|
||||
}
|
||||
}
|
||||
|
||||
// Custom responsivity (px-based, for when default breakpoints aren't enough)
|
||||
@mixin break-from($size) {
|
||||
// Usage: @include break-from(741px) { }
|
||||
@media only screen and (min-width: $size) { @content; }
|
||||
}
|
||||
|
||||
|
||||
// Orientation mixin for landscape/portrait
|
||||
@mixin orientation($orientation) {
|
||||
// @include orientation(landscape) { ... }
|
||||
// @include orientation(portrait) { ... }
|
||||
@media only screen and (orientation: $orientation) { @content; }
|
||||
}
|
||||
|
||||
|
||||
// @include gradient (<top-color>, <bottom-color>);
|
||||
@mixin gradient($top, $bottom) {
|
||||
background: $top;
|
||||
background: -moz-linear-gradient(top, $top 0%, $bottom 100%);
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,$top), color-stop(100%,$bottom));
|
||||
background: -webkit-linear-gradient(top, $top 0%,$bottom 100%);
|
||||
background: -o-linear-gradient(top, $top 0%,$bottom 100%);
|
||||
background: -ms-linear-gradient(top, $top 0%,$bottom 100%);
|
||||
background: linear-gradient(to bottom, $top 0%,$bottom 100%);
|
||||
}
|
||||
|
||||
|
||||
// Color system
|
||||
|
||||
$white: #fff;
|
||||
$gray-100: #f8f9fa;
|
||||
$gray-200: #e9ecef;
|
||||
$gray-300: #dee2e6;
|
||||
$gray-400: #ced4da;
|
||||
$gray-500: #adb5bd;
|
||||
$gray-600: #6c757d;
|
||||
$gray-700: #495057;
|
||||
$gray-800: #343a40;
|
||||
$gray-900: #212529;
|
||||
$black: #000;
|
||||
|
||||
$yellow: #ffe000;
|
||||
$black: #1d2d35;
|
||||
$beige: #fbf7f0;
|
||||
// $red: #e55235;
|
||||
$purple: #5d2f86;
|
||||
$brown: #aa9c84;
|
||||
|
||||
$blue-300: #8ed6fb;
|
||||
$pink-500: #d32e9d;
|
||||
|
||||
$primary: $purple;
|
||||
|
||||
// Options
|
||||
//
|
||||
// Quickly modify global styling by enabling or disabling optional features.
|
||||
|
||||
$enable-caret: true;
|
||||
$enable-rounded: true;
|
||||
$enable-shadows: false;
|
||||
$enable-gradients: false;
|
||||
$enable-transitions: true;
|
||||
$enable-reduced-motion: true;
|
||||
$enable-smooth-scroll: true;
|
||||
$enable-grid-classes: true;
|
||||
$enable-button-pointers: true;
|
||||
$enable-rfs: true;
|
||||
$enable-validation-icons: true;
|
||||
$enable-negative-margins: true;
|
||||
$enable-deprecation-messages: true;
|
||||
$enable-important-utilities: true;
|
||||
|
||||
/** Bootstrap navbar fix (https://git.io/fADqW) */
|
||||
$navbar-dark-toggler-icon-bg: none;
|
||||
$navbar-light-toggler-icon-bg: none;
|
||||
|
||||
// Options
|
||||
//
|
||||
// Quickly modify global styling by enabling or disabling optional features.
|
||||
|
||||
// $enable-responsive-font-sizes: true;
|
||||
|
||||
// Body
|
||||
//
|
||||
// Settings for the `<body>` element.
|
||||
|
||||
$body-bg: $white;
|
||||
$body-color: $black;
|
||||
|
||||
// Links
|
||||
//
|
||||
// Style anchor elements.
|
||||
|
||||
$link-color: $primary;
|
||||
$link-decoration: none;
|
||||
|
||||
// Grid containers
|
||||
//
|
||||
// Define the maximum width of `.container` for different screen sizes.
|
||||
|
||||
$container-max-widths: (
|
||||
sm: 540px,
|
||||
md: 720px,
|
||||
lg: 960px,
|
||||
xl: 1240px,
|
||||
xxl: 1320px
|
||||
);
|
||||
|
||||
@include _assert-ascending($container-max-widths, "$container-max-widths");
|
||||
|
||||
// Grid columns
|
||||
//
|
||||
// Set the number of columns and specify the width of the gutters.
|
||||
|
||||
$grid-columns: 16;
|
||||
$grid-gutter-width: 48px;
|
||||
$grid-row-columns: 6;
|
||||
|
||||
// Components
|
||||
//
|
||||
// Define common padding and border radius sizes and more.
|
||||
|
||||
$border-color: $gray-200;
|
||||
|
||||
// Typography
|
||||
//
|
||||
// Font, line-height, and color for body text, headings, and more.
|
||||
|
||||
// stylelint-disable value-keyword-case
|
||||
$font-family-sans-serif: "Jost", -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||
$font-family-monospace: sfmono-regular, menlo, monaco, consolas, "Liberation Mono", "Courier New", monospace;
|
||||
$font-family-base: $font-family-sans-serif;
|
||||
// stylelint-enable value-keyword-case
|
||||
|
||||
$font-size-base: 1rem; // Assumes the browser default, typically `16px`
|
||||
$font-size-xl: $font-size-base * 1.375;
|
||||
$font-size-lg: $font-size-base * 1.25;
|
||||
$font-size-md: $font-size-base * 1.125;
|
||||
$font-size-sm: $font-size-base * 0.875;
|
||||
|
||||
$line-height-base: 1.5;
|
||||
|
||||
$headings-font-family: null;
|
||||
$headings-font-weight: 700;
|
||||
|
||||
$lead-font-weight: 400;
|
||||
|
||||
// Spacing
|
||||
//
|
||||
// Control the default styling of most Bootstrap elements by modifying these
|
||||
// variables. Mostly focused on spacing.
|
||||
// You can add more entries to the $spacers map, should you need more variation.
|
||||
|
||||
$spacer: 1rem;
|
||||
|
||||
// Navbar
|
||||
|
||||
$navbar-padding-y: $spacer / 2;
|
||||
$navbar-padding-x: null;
|
||||
|
||||
$navbar-nav-link-padding-x: 0.5rem;
|
||||
|
||||
$navbar-light-color: $black;
|
||||
$navbar-light-hover-color: $primary;
|
||||
$navbar-light-active-color: $primary;
|
||||
|
||||
// Cards
|
||||
|
||||
$card-border-color: $gray-200;
|
||||
|
||||
// Alerts
|
||||
//
|
||||
// Define alert colors, border radius, and padding.
|
||||
|
||||
$alert-padding-y: $spacer;
|
||||
$alert-padding-x: $spacer * 1.5;
|
||||
$alert-margin-bottom: 0;
|
||||
$alert-border-radius: 0;
|
||||
$alert-link-font-weight: $headings-font-weight;
|
||||
$alert-border-width: 0;
|
||||
|
||||
$alert-bg-scale: 0;
|
||||
$alert-border-scale: 0;
|
||||
$alert-color-scale: 0;
|
||||
@@ -1,63 +0,0 @@
|
||||
.alert {
|
||||
font-family: $font-family-monospace;
|
||||
font-size: $font-size-sm;
|
||||
}
|
||||
|
||||
.alert-icon {
|
||||
margin-right: 0.75rem;
|
||||
}
|
||||
|
||||
.docs .alert {
|
||||
margin: 2rem -1.5rem;
|
||||
}
|
||||
|
||||
.alert .alert-link {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.alert-dark {
|
||||
color: $white;
|
||||
background-color: $black;
|
||||
}
|
||||
|
||||
.alert-dark .alert-link {
|
||||
color: $white;
|
||||
}
|
||||
|
||||
.alert-light {
|
||||
color: $black;
|
||||
}
|
||||
|
||||
.alert-warning {
|
||||
background: $beige;
|
||||
color: $black;
|
||||
}
|
||||
|
||||
/*
|
||||
.alert-light {
|
||||
color: #215888;
|
||||
background: linear-gradient(-45deg, rgb(212, 245, 255), rgb(234, 250, 255), rgb(234, 250, 255), #d3f6ef);
|
||||
}
|
||||
|
||||
.alert-light .alert-link {
|
||||
color: #215888;
|
||||
}
|
||||
*/
|
||||
|
||||
.alert-white {
|
||||
background-color: rgba(255, 255, 255, 0.95);
|
||||
}
|
||||
|
||||
.alert-primary {
|
||||
color: $white;
|
||||
background-color: $primary;
|
||||
}
|
||||
|
||||
.alert-primary .alert-link {
|
||||
color: $white;
|
||||
}
|
||||
|
||||
.alert .alert-link:hover,
|
||||
.alert .alert-link:focus {
|
||||
text-decoration: none;
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
.navbar .btn-link {
|
||||
color: $navbar-light-color;
|
||||
padding: 0.4375rem 0;
|
||||
}
|
||||
|
||||
#mode {
|
||||
margin-right: 1.25rem;
|
||||
}
|
||||
|
||||
.btn-link:focus {
|
||||
outline: 0;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
#navigation {
|
||||
margin-left: 1.25rem;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
#mode {
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
|
||||
.navbar .btn-link {
|
||||
padding: 0.5625em 0.25rem 0.5rem 0.125rem;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar .btn-link:hover {
|
||||
color: $navbar-light-hover-color;
|
||||
}
|
||||
|
||||
.navbar .btn-link:active {
|
||||
color: $navbar-light-active-color;
|
||||
}
|
||||
|
||||
body .toggle-dark {
|
||||
display: block;
|
||||
}
|
||||
|
||||
body .toggle-light {
|
||||
display: none;
|
||||
}
|
||||
|
||||
body.dark .toggle-light {
|
||||
display: block;
|
||||
}
|
||||
|
||||
body.dark .toggle-dark {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.btn-clipboard {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
.doks-clipboard {
|
||||
position: relative;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.btn-clipboard {
|
||||
position: absolute;
|
||||
top: 1rem;
|
||||
right: 0.25rem;
|
||||
z-index: 10;
|
||||
display: block;
|
||||
padding: 0.25rem 0.5rem;
|
||||
font-size: $font-size-sm;
|
||||
}
|
||||
}
|
||||
|
||||
.copy-status::after {
|
||||
content: "Copy";
|
||||
display: block;
|
||||
color: $body-color;
|
||||
}
|
||||
|
||||
.copy-status:hover::after {
|
||||
content: "Copy";
|
||||
display: block;
|
||||
color: $pink-500;
|
||||
}
|
||||
|
||||
.copy-status:focus::after,
|
||||
.copy-status:active::after {
|
||||
content: "Copied";
|
||||
display: block;
|
||||
color: $pink-500;
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
pre,
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: $font-family-monospace;
|
||||
font-size: $font-size-sm;
|
||||
border-radius: $border-radius;
|
||||
}
|
||||
|
||||
code {
|
||||
background: $beige;
|
||||
color: $black;
|
||||
padding: 0.25rem 0.5rem;
|
||||
}
|
||||
|
||||
pre {
|
||||
margin: 2rem 0;
|
||||
}
|
||||
|
||||
pre code {
|
||||
display: block;
|
||||
overflow-x: auto;
|
||||
line-height: $line-height-base;
|
||||
padding: 1.25rem 1.5rem;
|
||||
tab-size: 4;
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: transparent transparent;
|
||||
}
|
||||
|
||||
.hljs {
|
||||
padding: 1.25rem 1.5rem;
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(sm) {
|
||||
pre,
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
pre {
|
||||
margin: 2rem -1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
pre code::-webkit-scrollbar {
|
||||
height: 5px;
|
||||
}
|
||||
|
||||
pre code::-webkit-scrollbar-thumb {
|
||||
background: $gray-200;
|
||||
}
|
||||
|
||||
pre code:hover {
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: $gray-200 transparent;
|
||||
}
|
||||
|
||||
pre code::-webkit-scrollbar-thumb:hover {
|
||||
background: $gray-200;
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
.comment-list {
|
||||
@extend .list-unstyled;
|
||||
}
|
||||
|
||||
.comment-list ol {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.comment-form p {
|
||||
@extend .form-group !optional;
|
||||
}
|
||||
|
||||
.comment-form input[type="text"],
|
||||
.comment-form input[type="email"],
|
||||
.comment-form input[type="url"],
|
||||
.comment-form textarea {
|
||||
@extend .form-control;
|
||||
}
|
||||
|
||||
.comment-form input[type="submit"] {
|
||||
@extend .btn;
|
||||
@extend .btn-secondary;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin-bottom: 1rem;
|
||||
font-size: 1.25rem;
|
||||
border-left: 3px solid $gray-300;
|
||||
padding-left: 1rem;
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
/*
|
||||
|
||||
Doks — based on Ascetic by (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
|
||||
|
||||
*/
|
||||
|
||||
.hljs {
|
||||
display: block;
|
||||
overflow-x: auto;
|
||||
padding: 0.5em;
|
||||
background: $beige;
|
||||
color: $body-color;
|
||||
}
|
||||
|
||||
.hljs-string,
|
||||
.hljs-variable,
|
||||
.hljs-template-variable,
|
||||
.hljs-symbol,
|
||||
.hljs-bullet,
|
||||
.hljs-section,
|
||||
.hljs-addition,
|
||||
.hljs-attribute,
|
||||
.hljs-link {
|
||||
color: $pink-500;
|
||||
}
|
||||
|
||||
.hljs-comment,
|
||||
.hljs-quote,
|
||||
.hljs-meta,
|
||||
.hljs-deletion {
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.hljs-keyword,
|
||||
.hljs-selector-tag,
|
||||
.hljs-section,
|
||||
.hljs-name,
|
||||
.hljs-type,
|
||||
.hljs-strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.hljs-emphasis {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
body.dark .hljs {
|
||||
background: $body-overlay-dark;
|
||||
color: $body-color-dark;
|
||||
}
|
||||
|
||||
body.dark .hljs-string,
|
||||
body.dark .hljs-variable,
|
||||
body.dark .hljs-template-variable,
|
||||
body.dark .hljs-symbol,
|
||||
body.dark .hljs-bullet,
|
||||
body.dark .hljs-section,
|
||||
body.dark .hljs-addition,
|
||||
body.dark .hljs-attribute,
|
||||
body.dark .hljs-link {
|
||||
color: $blue-300;
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
/** Search form */
|
||||
.search-form {
|
||||
@extend .form-inline !optional;
|
||||
}
|
||||
|
||||
.search-form label {
|
||||
@extend .form-group;
|
||||
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.search-form .search-field {
|
||||
@extend .form-control;
|
||||
}
|
||||
|
||||
.search-form .search-submit {
|
||||
@extend .btn;
|
||||
@extend .btn-secondary;
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
figure {
|
||||
margin: 2rem 0;
|
||||
}
|
||||
|
||||
.figure-caption {
|
||||
margin: 0.25rem 0 0.75rem;
|
||||
}
|
||||
|
||||
figure.wide {
|
||||
margin: 2rem -1.5rem;
|
||||
}
|
||||
|
||||
figure.wide .figure-caption {
|
||||
margin: 0.25rem 1.5rem 0.75rem;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
figure.wide {
|
||||
margin: 2rem -2.5rem;
|
||||
}
|
||||
|
||||
figure.wide .figure-caption {
|
||||
margin: 0.25rem 2.5rem 0.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
figure.wide {
|
||||
margin: 2rem -5rem;
|
||||
}
|
||||
|
||||
figure.wide .figure-caption {
|
||||
margin: 0.25rem 5rem 0.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
.blur-up {
|
||||
filter: blur(5px);
|
||||
}
|
||||
|
||||
.blur-up.lazyloaded {
|
||||
filter: unset;
|
||||
}
|
||||
|
||||
.img-simple {
|
||||
margin-top: 0.375rem;
|
||||
margin-bottom: 1.25rem;
|
||||
}
|
||||
@@ -1,75 +0,0 @@
|
||||
.navbar-form {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#suggestions {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
margin-top: 0.5rem;
|
||||
width: calc(100vw - 3rem);
|
||||
}
|
||||
|
||||
#suggestions a {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
padding: 0.75rem;
|
||||
margin: 0 0.5rem;
|
||||
}
|
||||
|
||||
#suggestions a:focus {
|
||||
background: $gray-100;
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
#suggestions div:not(:first-child) {
|
||||
border-top: 1px dashed $gray-200;
|
||||
}
|
||||
|
||||
#suggestions div:first-child {
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
#suggestions div:last-child {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
#suggestions a:hover {
|
||||
background: $gray-100;
|
||||
}
|
||||
|
||||
#suggestions span {
|
||||
display: flex;
|
||||
font-size: $font-size-base;
|
||||
}
|
||||
|
||||
#suggestions span:first-child {
|
||||
font-weight: $headings-font-weight;
|
||||
color: $black;
|
||||
}
|
||||
|
||||
#suggestions span:nth-child(2) {
|
||||
color: $gray-700;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(sm) {
|
||||
#suggestions {
|
||||
width: 30rem;
|
||||
}
|
||||
|
||||
#suggestions a {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#suggestions span:first-child {
|
||||
width: 9rem;
|
||||
padding-right: 1rem;
|
||||
border-right: 1px solid $gray-200;
|
||||
display: inline-block;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#suggestions span:nth-child(2) {
|
||||
width: 19rem;
|
||||
padding-left: 1rem;
|
||||
}
|
||||
}
|
||||
@@ -1,131 +0,0 @@
|
||||
/*!
|
||||
* GitHub Light v0.5.0
|
||||
* Copyright (c) 2012 - 2017 GitHub, Inc.
|
||||
* Licensed under MIT (https://github.com/primer/github-syntax-theme-generator/blob/master/LICENSE)
|
||||
*/
|
||||
|
||||
.c1,
|
||||
.c /* comment, punctuation.definition.comment, string.comment */ {
|
||||
color: #6a737d;
|
||||
}
|
||||
|
||||
.v /* variable */,
|
||||
.smw /* sublimelinter.mark.warning */ {
|
||||
color: #e36209;
|
||||
}
|
||||
|
||||
// .c1 /* constant, entity.name.constant, variable.other.constant, variable.language, support, meta.property-name, support.constant, support.variable, meta.module-reference, markup.raw, meta.diff.header, meta.output */,
|
||||
.s .v /* string variable */ {
|
||||
color: #005cc5;
|
||||
}
|
||||
|
||||
.e /* entity */,
|
||||
.en /* entity.name */ {
|
||||
color: #6f42c1;
|
||||
}
|
||||
|
||||
.smi /* variable.parameter.function, storage.modifier.package, storage.modifier.import, storage.type.java, variable.other */,
|
||||
.s .s1 /* string source */ {
|
||||
color: #24292e;
|
||||
}
|
||||
|
||||
.ent /* entity.name.tag, markup.quote */ {
|
||||
color: #22863a;
|
||||
}
|
||||
|
||||
.k /* keyword, storage, storage.type */ {
|
||||
color: #d73a49;
|
||||
}
|
||||
|
||||
.s /* string */,
|
||||
.pds /* punctuation.definition.string, source.regexp, string.regexp.character-class */,
|
||||
.s .pse .s1 /* string punctuation.section.embedded source */,
|
||||
.sr /* string.regexp */,
|
||||
.sr .cce /* string.regexp constant.character.escape */,
|
||||
.sr .sre /* string.regexp source.ruby.embedded */,
|
||||
.sr .sra /* string.regexp string.regexp.arbitrary-repitition */ {
|
||||
color: #032f62;
|
||||
}
|
||||
|
||||
.bu /* invalid.broken, invalid.deprecated, invalid.unimplemented, message.error, brackethighlighter.unmatched, sublimelinter.mark.error */ {
|
||||
color: #b31d28;
|
||||
}
|
||||
|
||||
.ii /* invalid.illegal */ {
|
||||
color: #fafbfc;
|
||||
background-color: #b31d28;
|
||||
}
|
||||
|
||||
.c2 /* carriage-return */ {
|
||||
color: #fafbfc;
|
||||
background-color: #d73a49;
|
||||
}
|
||||
|
||||
.c2::before /* carriage-return */ {
|
||||
content: "^M";
|
||||
}
|
||||
|
||||
.sr .cce /* string.regexp constant.character.escape */ {
|
||||
font-weight: bold;
|
||||
color: #22863a;
|
||||
}
|
||||
|
||||
.ml /* markup.list */ {
|
||||
color: #735c0f;
|
||||
}
|
||||
|
||||
.mh /* markup.heading */,
|
||||
.mh .en /* markup.heading entity.name */,
|
||||
.ms /* meta.separator */ {
|
||||
font-weight: bold;
|
||||
color: #005cc5;
|
||||
}
|
||||
|
||||
.mi /* markup.italic */ {
|
||||
font-style: italic;
|
||||
color: #24292e;
|
||||
}
|
||||
|
||||
.mb /* markup.bold */ {
|
||||
font-weight: bold;
|
||||
color: #24292e;
|
||||
}
|
||||
|
||||
.md /* markup.deleted, meta.diff.header.from-file, punctuation.definition.deleted */ {
|
||||
color: #b31d28;
|
||||
background-color: #ffeef0;
|
||||
}
|
||||
|
||||
.mi1 /* markup.inserted, meta.diff.header.to-file, punctuation.definition.inserted */ {
|
||||
color: #22863a;
|
||||
background-color: #f0fff4;
|
||||
}
|
||||
|
||||
.mc /* markup.changed, punctuation.definition.changed */ {
|
||||
color: #e36209;
|
||||
background-color: #ffebda;
|
||||
}
|
||||
|
||||
.mi2 /* markup.ignored, markup.untracked */ {
|
||||
color: #f6f8fa;
|
||||
background-color: #005cc5;
|
||||
}
|
||||
|
||||
.mdr /* meta.diff.range */ {
|
||||
font-weight: bold;
|
||||
color: #6f42c1;
|
||||
}
|
||||
|
||||
.ba /* brackethighlighter.tag, brackethighlighter.curly, brackethighlighter.round, brackethighlighter.square, brackethighlighter.angle, brackethighlighter.quote */ {
|
||||
color: #586069;
|
||||
}
|
||||
|
||||
.sg /* sublimelinter.gutter-mark */ {
|
||||
color: #959da5;
|
||||
}
|
||||
|
||||
.corl /* constant.other.reference.link, string.other.link */ {
|
||||
text-decoration: underline;
|
||||
color: #032f62;
|
||||
}
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
table {
|
||||
@extend .table;
|
||||
|
||||
margin: 3rem 0;
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
.footer {
|
||||
border-top: 1px solid $gray-200;
|
||||
padding-top: 1.125rem;
|
||||
padding-bottom: 1.125rem;
|
||||
body.dark & {
|
||||
background: #212529;
|
||||
}
|
||||
a {
|
||||
color: var(--text);
|
||||
&:hover, &:focus {
|
||||
color: var(--hub);
|
||||
text-decoration: none;
|
||||
body.dark & {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.footer ul {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.footer li {
|
||||
font-size: $font-size-sm;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
.footer li {
|
||||
font-size: $font-size-base;
|
||||
}
|
||||
}
|
||||
@@ -1,281 +0,0 @@
|
||||
.banner .nav li {
|
||||
@extend .nav-item;
|
||||
}
|
||||
|
||||
.banner .nav a {
|
||||
@extend .nav-link;
|
||||
}
|
||||
|
||||
.navbar-text {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
font-weight: 600;
|
||||
font-size: 18px;
|
||||
.logo {
|
||||
width: size(2);
|
||||
height: size(2);
|
||||
margin: 0 size(0.5);
|
||||
position: relative;
|
||||
top: -1px;
|
||||
@include break(t) { margin-left: 0; }
|
||||
@include break(d) { width: size(2.5); height: size(2.5); }
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-light .navbar-brand,
|
||||
.navbar-light .navbar-brand:hover,
|
||||
.navbar-light .navbar-brand:active {
|
||||
color: $body-color;
|
||||
}
|
||||
|
||||
.navbar-light .navbar-nav .active .nav-link {
|
||||
color: $primary;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
/*
|
||||
.navbar-brand {
|
||||
font-size: $font-size-xl;
|
||||
}
|
||||
*/
|
||||
|
||||
.navbar-text {
|
||||
margin-left: 1.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-nav {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.nav-item {
|
||||
margin-left: 1.25rem;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
.nav-item {
|
||||
margin-left: 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(sm) {
|
||||
.nav-item:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(md) {
|
||||
.navbar .container {
|
||||
padding-left: 1.5rem;
|
||||
padding-right: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.break {
|
||||
flex-basis: 100%;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.navbar {
|
||||
@extend %box-shadow-bigger;
|
||||
background-color: hsla(var(--card-hsl), 0.95);
|
||||
margin-top: 6px;
|
||||
backdrop-filter: blur(4px);
|
||||
}
|
||||
|
||||
.header-bar {
|
||||
border-top: 6px solid;
|
||||
border-image-source: linear-gradient(90deg, rgb(132, 85, 159) 0%, rgb(178, 85, 180) 58.33%, rgb(148, 55, 52) 100%);
|
||||
border-image-slice: 1;
|
||||
}
|
||||
|
||||
.home .navbar {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
.navbar-form {
|
||||
position: relative;
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
.navbar-brand {
|
||||
margin-right: 1rem !important;
|
||||
}
|
||||
|
||||
.main-nav .nav-item:first-child .nav-link,
|
||||
.social-nav .nav-item:first-child .nav-link {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.main-nav .nav-item:last-child .nav-link,
|
||||
.social-nav .nav-item:last-child .nav-link {
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.navbar-form {
|
||||
margin-top: 0;
|
||||
margin-left: 6rem;
|
||||
margin-right: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
.navbar-form {
|
||||
margin-left: 15rem;
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(xl) {
|
||||
.navbar-form {
|
||||
margin-left: 30rem;
|
||||
}
|
||||
}
|
||||
|
||||
.form-control.is-search {
|
||||
/*
|
||||
padding-right: calc(1.5em + 0.75rem);
|
||||
*/
|
||||
padding-right: 2.5rem;
|
||||
background: $gray-100;
|
||||
border: 0;
|
||||
|
||||
/*
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%236c757d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-search'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");
|
||||
background-repeat: no-repeat;
|
||||
background-position: right calc(0.375em + 0.1875rem) center;
|
||||
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
|
||||
*/
|
||||
}
|
||||
|
||||
.navbar-form::after {
|
||||
position: absolute;
|
||||
top: 0.4625rem;
|
||||
right: 0.5375rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 1.5rem;
|
||||
padding-right: 0.4375rem;
|
||||
padding-left: 0.4375rem;
|
||||
font-size: $font-size-base * 0.75;
|
||||
color: $gray-700;
|
||||
content: "/";
|
||||
border: 1px solid $gray-300;
|
||||
border-radius: 0.25rem;
|
||||
}
|
||||
|
||||
/*! purgecss start ignore */
|
||||
.algolia-autocomplete {
|
||||
display: flex !important;
|
||||
}
|
||||
|
||||
.algolia-autocomplete .ds-dropdown-menu {
|
||||
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(sm) {
|
||||
.algolia-autocomplete .ds-dropdown-menu {
|
||||
max-width: 512px !important;
|
||||
min-width: 312px !important;
|
||||
width: auto !important;
|
||||
}
|
||||
|
||||
.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column::after {
|
||||
content: "|";
|
||||
margin-right: 0.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.algolia-autocomplete .algolia-docsearch-suggestion--title {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.algolia-autocomplete .algolia-docsearch-suggestion--highlight {
|
||||
padding: 0 0.05em;
|
||||
}
|
||||
|
||||
.algolia-autocomplete .algolia-docsearch-footer {
|
||||
margin-top: 1rem;
|
||||
margin-right: 0.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
/*! purgecss end ignore */
|
||||
|
||||
/*
|
||||
* Source: https://medium.com/creative-technology-concepts-code/responsive-mobile-dropdown-navigation-using-css-only-7218e4498a99
|
||||
*/
|
||||
|
||||
/* Style the menu icon for the dropdown */
|
||||
|
||||
.navbar .menu-icon {
|
||||
cursor: pointer;
|
||||
|
||||
/* display: inline-block; */
|
||||
|
||||
/* float: right; */
|
||||
padding: 1.125rem 0.625rem;
|
||||
margin: 0 0 0 -0.625rem;
|
||||
|
||||
/* position: relative; */
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.navbar .menu-icon .navicon {
|
||||
background: $navbar-light-color;
|
||||
display: block;
|
||||
height: 2px;
|
||||
position: relative;
|
||||
transition: background 0.2s ease-out;
|
||||
width: 18px;
|
||||
}
|
||||
|
||||
.navbar .menu-icon .navicon::before,
|
||||
.navbar .menu-icon .navicon::after {
|
||||
background: $navbar-light-color;
|
||||
content: "";
|
||||
display: block;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
transition: all 0.2s ease-out;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.navbar .menu-icon .navicon::before {
|
||||
top: 5px;
|
||||
}
|
||||
|
||||
.navbar .menu-icon .navicon::after {
|
||||
top: -5px;
|
||||
}
|
||||
|
||||
/* Add the icon and menu animations when the checkbox is clicked */
|
||||
|
||||
.navbar .menu-btn {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.navbar .menu-btn:checked ~ .navbar-collapse {
|
||||
display: block;
|
||||
max-height: 100vh;
|
||||
}
|
||||
|
||||
.navbar .menu-btn:checked ~ .menu-icon .navicon {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.navbar .menu-btn:checked ~ .menu-icon .navicon::before {
|
||||
transform: rotate(-45deg);
|
||||
}
|
||||
|
||||
.navbar .menu-btn:checked ~ .menu-icon .navicon::after {
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
|
||||
.navbar .menu-btn:checked ~ .menu-icon:not(.steps) .navicon::before,
|
||||
.navbar .menu-btn:checked ~ .menu-icon:not(.steps) .navicon::after {
|
||||
top: 0;
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
.docs-content > h2[id]::before,
|
||||
.docs-content > h3[id]::before,
|
||||
.docs-content > h4[id]::before {
|
||||
display: block;
|
||||
height: 6rem;
|
||||
margin-top: -6rem;
|
||||
content: "";
|
||||
}
|
||||
|
||||
.docs-content figure {
|
||||
&.stretch img {
|
||||
width: 100%;
|
||||
}
|
||||
figcaption {
|
||||
text-align: center;
|
||||
font-weight: 400;
|
||||
padding: 10px 0 0 0;
|
||||
p {
|
||||
font-size: 14px;
|
||||
opacity: 0.7;
|
||||
padding: 0 size(2);
|
||||
line-height: size(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.anchor {
|
||||
visibility: hidden;
|
||||
padding-left: 0.5rem;
|
||||
}
|
||||
|
||||
h1:hover a,
|
||||
h2:hover a,
|
||||
h3:hover a,
|
||||
h4:hover a {
|
||||
visibility: visible;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.card-list {
|
||||
margin-top: 2.25rem;
|
||||
}
|
||||
|
||||
.edit-page {
|
||||
margin-top: 3rem;
|
||||
font-size: $font-size-base;
|
||||
}
|
||||
|
||||
.edit-page svg {
|
||||
margin-right: 0.5rem;
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
p.meta {
|
||||
margin-top: 0.5rem;
|
||||
font-size: $font-size-base;
|
||||
}
|
||||
|
||||
.breadcrumb {
|
||||
margin-top: 2.25rem;
|
||||
font-size: $font-size-base;
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
.home .card,
|
||||
.contributors.list .card,
|
||||
.blog.list .card {
|
||||
margin-top: 2rem;
|
||||
margin-bottom: 2rem;
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
|
||||
.home .card:hover,
|
||||
.contributors.list .card:hover,
|
||||
.blog.list .card:hover {
|
||||
transform: scale(1.025);
|
||||
}
|
||||
|
||||
.home .card-body,
|
||||
.contributors.list .card-body,
|
||||
.blog.list .card-body {
|
||||
padding: 0 2rem 1rem;
|
||||
}
|
||||
|
||||
.blog-header {
|
||||
text-align: center;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.blog-footer {
|
||||
text-align: center;
|
||||
}
|
||||
@@ -1,139 +0,0 @@
|
||||
.docs-links,
|
||||
.docs-toc {
|
||||
@extend %tfx;
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: var(--bg) var(--bg);
|
||||
ul {
|
||||
li { // sidebar & TOC links
|
||||
margin: 0;
|
||||
line-height: 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.docs-links,
|
||||
.docs-toc {
|
||||
&::-webkit-scrollbar { width: 5px; }
|
||||
&::-webkit-scrollbar-track { background: transparent; }
|
||||
&::-webkit-scrollbar-thumb { background: transparent; }
|
||||
&:hover {
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: var(--text-light) var(--bg-muted);
|
||||
&::-webkit-scrollbar-track { background: var(--bg-muted); }
|
||||
&::-webkit-scrollbar-thumb { background: var(--text-light); border-radius: var(--radius); }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.docs-links h3,
|
||||
.page-links h3 {
|
||||
text-transform: uppercase;
|
||||
font-size: $font-size-base;
|
||||
margin: 1.25rem 0 0.5rem 0;
|
||||
padding: 1.5rem 0 0 0;
|
||||
@include break(d) {
|
||||
margin: 1.125rem size(3) 0.75rem 0;
|
||||
padding: 1.375rem 0 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.docs-links h3:not(:first-child) {
|
||||
border-top: 2px solid var(--bg-muted);
|
||||
}
|
||||
|
||||
a.docs-link,
|
||||
.page-links a {
|
||||
@extend %tfx;
|
||||
color: var(--text-muted);
|
||||
display: block;
|
||||
padding: size(0.5) size(1); //0.125rem 0;
|
||||
font-size: $font-size-base;
|
||||
line-height: size(2);
|
||||
border-radius: var(--radius);
|
||||
@include break(d) {
|
||||
margin: 0 size(3) 0 0;
|
||||
}
|
||||
&:hover {
|
||||
color: var(--text);
|
||||
background: var(--bg-muted);
|
||||
text-decoration: none;
|
||||
body.dark & {
|
||||
color: var(--bg-white);
|
||||
background: hsla(var(--bg-muted-hsl), 0.05);
|
||||
}
|
||||
}
|
||||
&.active {
|
||||
text-decoration: none;
|
||||
color: var(--hub);
|
||||
font-weight: 500;
|
||||
background: hsla(var(--hub-hsl), 0.1);
|
||||
body.dark & {
|
||||
color: hsl(200.4, 93.2%, 77.1%);
|
||||
background: hsla(200.4, 93.2%, 77.1%, 0.1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.page-links { // TOC
|
||||
a {
|
||||
margin: 0;
|
||||
font-size: 13px;
|
||||
line-height: size(1.5);
|
||||
font-weight: 500;
|
||||
color: var(--text);
|
||||
padding: size(0.5) size(1);
|
||||
}
|
||||
li {
|
||||
margin-top: 0.375rem;
|
||||
padding-top: 0.375rem;
|
||||
ul {
|
||||
li {
|
||||
padding-left: 1rem;
|
||||
padding-top: 0.125rem;
|
||||
a {
|
||||
font-weight: 400;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
.page-links li:not(:first-child) {
|
||||
border-top: 1px dashed $gray-200;
|
||||
}
|
||||
|
||||
.page-links a {
|
||||
color: $body-color;
|
||||
display: block;
|
||||
padding: 0.125rem 0;
|
||||
font-size: $font-size-base * 0.9375;
|
||||
}
|
||||
|
||||
.docs-link:hover,
|
||||
.docs-link.active,
|
||||
.page-links a:hover {
|
||||
text-decoration: none;
|
||||
color: $link-color;
|
||||
}
|
||||
*/
|
||||
|
||||
.docs-links h3.sidebar-link,
|
||||
.page-links h3.sidebar-link {
|
||||
text-transform: none;
|
||||
font-size: $font-size-md;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.docs-links h3.sidebar-link a,
|
||||
.page-links h3.sidebar-link a {
|
||||
color: $body-color;
|
||||
}
|
||||
|
||||
.docs-links h3.sidebar-link a:hover,
|
||||
.page-links h3.sidebar-link a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
module.exports = {
|
||||
presets: [
|
||||
[
|
||||
'@babel/preset-env',
|
||||
{
|
||||
targets: {
|
||||
browsers: [
|
||||
// Best practice: https://github.com/babel/babel/issues/7789
|
||||
'>=1%',
|
||||
'not ie 11',
|
||||
'not op_mini all'
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
};
|
||||
@@ -1,3 +0,0 @@
|
||||
docker build -t documentation .
|
||||
docker tag documentation kerberos/documentation:1.14
|
||||
docker push kerberos/documentation:1.14
|
||||
@@ -0,0 +1,6 @@
|
||||
<!doctype html><html lang=en-us><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="ie=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=stylesheet href=https://doc.kerberos.io/main.5aa8061fdddcae33bf9aae606a659f783fca649c2a6c915897a14d1088493ae547064045e7ca5a43d69061955d449757d1bcb708760ae71f478384770974e798.css integrity="sha512-WqgGH93crjO/mq5gamWfeD/KZJwqbJFYl6FNEIhJOuVHBkBF58paQ9aQYZVdRJdX0by3CHYK5x9Hg4R3CXTnmA==" crossorigin=anonymous><noscript><style>img.lazyload{display:none}</style></noscript><meta name=robots content="index, follow"><meta name=googlebot content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1"><meta name=bingbot content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1"><title>Categories - Kerberos Docs</title><meta name=description content="Open and extensible video surveillance and analytics solution for everyone at any location."><link rel=canonical href=https://doc.kerberos.io/categories/><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="/doks.png"><meta name=twitter:title content="Categories"><meta name=twitter:description content="Open and extensible video surveillance and analytics solution for everyone at any location."><meta name=twitter:site content="@kerberosio"><meta name=twitter:creator content="@kerberosio"><meta property="og:title" content="Categories"><meta property="og:description" content="Open and extensible video surveillance and analytics solution for everyone at any location."><meta property="og:type" content="website"><meta property="og:url" content="/categories/"><meta property="og:image" content="/doks.png"><meta property="og:site_name" content="Kerberos Docs"><meta property="article:publisher" content="https://www.facebook.com/"><meta property="article:author" content="https://www.facebook.com/"><meta property="og:locale" content="en_US"><link rel=alternate type=application/rss+xml href=https://doc.kerberos.io/categories/index.xml><script type=application/ld+json>{"@context":"http://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/doc.kerberos.io\/"},{"@type":"ListItem","position":3,"name":"Categories","item":"https:\/\/doc.kerberos.io\/\/categories\/"}]}</script><meta name=theme-color content="#fff"><link rel=apple-touch-icon sizes=180x180 href=https://doc.kerberos.io/favicons/apple-touch-icon.png><link rel=icon type=image/png sizes=32x32 href=https://doc.kerberos.io/favicons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=https://doc.kerberos.io/favicons/favicon-16x16.png><link rel=manifest href=https://doc.kerberos.io/site.webmanifest><script async defer data-domain=doc.kerberos.io src=https://plausible.kerberos.io/js/plausible.js></script></head><body class="categories list"><div class="header-bar fixed-top"></div><header class="navbar fixed-top navbar-expand-md navbar-light"><div class=container><input class="menu-btn order-0" type=checkbox id=menu-btn>
|
||||
<label class="menu-icon d-md-none" for=menu-btn><span class=navicon></span></label><a class="navbar-brand order-1 order-md-0 me-auto" href=https://doc.kerberos.io/><img src=https://doc.kerberos.io/images/kerberos-logo.svg class=logo>
|
||||
Kerberos Docs</a>
|
||||
<button id=mode class="btn btn-link order-2 order-md-4" type=button aria-label="Toggle mode">
|
||||
<span class=toggle-dark><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-moon"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg></span><span class=toggle-light><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-sun"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></span></button><div class="collapse navbar-collapse order-4 order-md-1"><ul class="navbar-nav main-nav me-auto order-5 order-md-2"><li class=nav-item><a class=nav-link href=https://kerberos.io>Homepage</a></li></ul><div class="break order-6 d-md-none"></div><form class="navbar-form flex-grow-1 order-7 order-md-3"><input id=userinput class="form-control is-search" type=search placeholder="Search docs..." aria-label="Search docs..." autocomplete=off><div id=suggestions class="shadow bg-white rounded"></div></form></div></div></header><div class="wrap container" role=document><div class=content><div class="row justify-content-center"><div class="col-md-12 col-lg-10 col-xl-8"><article><h1 class=text-center>Categories</h1><div class=text-center></div><div class=card-list></div></article></div></div></div></div><footer class="footer text-muted"><div class=container><div class=row><div class="col-lg-6 order-last order-lg-first"><ul class="navbar-nav social-nav"><li class=copyright>© 2014–2021
|
||||
<a href=https://kerberos.io>Kerberos.io</a></li><li class=nav-item><a class=link href=https://twitter.com/kerberosio title=Twitter><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" 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 01-3.14 1.53 4.48 4.48.0 00-7.86 3v1A10.66 10.66.0 013 4s-4 9 5 13a11.64 11.64.0 01-7 2c9 5 20 0 20-11.5a4.5 4.5.0 00-.08-.83A7.72 7.72.0 0023 3z"/></svg><span class="ms-2 visually-hidden">Twitter</span></a></li><li class=nav-item><a class=link href=https://github.com/kerberos-io title=GitHub><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" 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 00-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44.0 0020 4.77 5.07 5.07.0 0019.91 1S18.73.65 16 2.48a13.38 13.38.0 00-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07.0 005 4.77 5.44 5.44.0 003.5 8.55c0 5.42 3.3 6.61 6.44 7A3.37 3.37.0 009 18.13V22"/></svg><span class="ms-2 visually-hidden">GitHub</span></a></li><li class=nav-item><a class=link href=https://www.reddit.com/r/kerberos_io/ title=Reddit><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-message-circle"><path d="M21 11.5a8.38 8.38.0 01-.9 3.8A8.5 8.5.0 0112.5 20a8.38 8.38.0 01-3.8-.9L3 21l1.9-5.7A8.38 8.38.0 014 11.5a8.5 8.5.0 014.7-7.6 8.38 8.38.0 013.8-.9h.5a8.48 8.48.0 018 8v.5z"/></svg><span class="ms-2 visually-hidden">Reddit</span></a></li></ul></div><div class="col-lg-10 order-first order-lg-last text-lg-end"><ul class=list-inline><li class=list-inline-item>Learn more about</li><li class=list-inline-item><a href=https://kerberos.io/product/enterprise-agent/>Enterprise Agent</a></li><li class=list-inline-item><a href=https://kerberos.io/product/hub/>Hub</a></li><li class=list-inline-item><a href=https://kerberos.io/product/open-source/>Kerberos Opensource</a></li><li class=list-inline-item><a href=https://kerberos.io/product/vault/>Vault</a></li></ul></div></div></div></footer><script src=https://doc.kerberos.io/js/highlight.min.13bf6b39f28cd07b0780c0c154bf050bad1e7b73231c15e43b993504cca3fa814222ded3c525f429528451fe039a5078c71ae4d000486d26f9b920cc7db474da.js integrity="sha512-E79rOfKM0HsHgMDBVL8FC60ee3MjHBXkO5k1BMyj+oFCIt7TxSX0KVKEUf4DmlB4xxrk0ABIbSb5uSDMfbR02g==" crossorigin=anonymous defer></script><script src=https://doc.kerberos.io/main.min.89223fc6eee34e2dc10266cff3c7fc87949c595388f775ec6e93132410cef77e5ff7f24a81db03c9b9eb6d2e6d75ea5a7d22945c574b65dfeb426f65af771230.js integrity="sha512-iSI/xu7jTi3BAmbP88f8h5ScWVOI93XsbpMTJBDO935f9/JKgdsDybnrbS5tdepafSKUXFdLZd/rQm9lr3cSMA==" crossorigin=anonymous defer></script><script src=https://doc.kerberos.io/index.min.71e05784bf5441c378e8824d18e4b5a057f28cde2bd06f927216eb278586f7ea7d96309df4600474b3b928ef2b635a64248e2cf3a7a023136087ed4050162608.js integrity="sha512-ceBXhL9UQcN46IJNGOS1oFfyjN4r0G+SchbrJ4WG9+p9ljCd9GAEdLO5KO8rY1pkJI4s86egIxNgh+1AUBYmCA==" crossorigin=anonymous defer></script></body></html>
|
||||
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Categories on</title><link>https://doc.kerberos.io/categories/</link><description>Recent content in Categories on</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><atom:link href="https://doc.kerberos.io/categories/index.xml" rel="self" type="application/rss+xml"/></channel></rss>
|
||||
@@ -1,88 +0,0 @@
|
||||
baseurl = "/"
|
||||
canonifyURLs = false
|
||||
disableAliases = true
|
||||
disableHugoGeneratorInject = true
|
||||
enableEmoji = true
|
||||
enableGitInfo = false
|
||||
enableRobotsTXT = true
|
||||
languageCode = "en-US"
|
||||
paginate = 7
|
||||
rssLimit = 10
|
||||
|
||||
# add redirects/headers
|
||||
[outputs]
|
||||
home = ["HTML", "RSS", "REDIRECTS", "HEADERS"]
|
||||
section = ["HTML", "RSS", "SITEMAP"]
|
||||
|
||||
# remove .{ext} from text/netlify
|
||||
[mediaTypes."text/netlify"]
|
||||
suffixes = [""]
|
||||
delimiter = ""
|
||||
|
||||
# add output format for netlify _redirects
|
||||
[outputFormats.REDIRECTS]
|
||||
mediaType = "text/netlify"
|
||||
baseName = "_redirects"
|
||||
isPlainText = true
|
||||
notAlternative = true
|
||||
|
||||
# add output format for netlify _headers
|
||||
[outputFormats.HEADERS]
|
||||
mediaType = "text/netlify"
|
||||
baseName = "_headers"
|
||||
isPlainText = true
|
||||
notAlternative = true
|
||||
|
||||
# add output format for section sitemap.xml
|
||||
[outputFormats.SITEMAP]
|
||||
mediaType = "application/xml"
|
||||
baseName = "sitemap"
|
||||
isHTML = false
|
||||
isPlainText = true
|
||||
noUgly = true
|
||||
rel = "sitemap"
|
||||
|
||||
[markup]
|
||||
[markup.goldmark]
|
||||
[markup.goldmark.extensions]
|
||||
linkify = false
|
||||
[markup.goldmark.parser]
|
||||
autoHeadingID = true
|
||||
autoHeadingIDType = "github"
|
||||
[markup.goldmark.parser.attribute]
|
||||
block = true
|
||||
title = true
|
||||
[markup.goldmark.renderer]
|
||||
unsafe = true
|
||||
[markup.highlight]
|
||||
codeFences = false
|
||||
guessSyntax = false
|
||||
hl_Lines = ""
|
||||
lineNoStart = 1
|
||||
lineNos = false
|
||||
lineNumbersInTable = true
|
||||
noClasses = false
|
||||
style = "dracula"
|
||||
tabWidth = 4
|
||||
|
||||
[sitemap]
|
||||
changefreq = "weekly"
|
||||
filename = "sitemap.xml"
|
||||
priority = 0.5
|
||||
|
||||
[taxonomies]
|
||||
contributor = "contributors"
|
||||
|
||||
[RelPermalinks]
|
||||
blog = "/blog/:title/"
|
||||
|
||||
[module]
|
||||
[[module.mounts]]
|
||||
source = "assets"
|
||||
target = "assets"
|
||||
[[module.mounts]]
|
||||
source = "static"
|
||||
target = "static"
|
||||
[[module.mounts]]
|
||||
source = "node_modules/flexsearch"
|
||||
target = "assets/js/vendor/flexsearch"
|
||||
@@ -1,86 +0,0 @@
|
||||
[[docs]]
|
||||
name = "Prologue"
|
||||
weight = 10
|
||||
identifier = "prologue"
|
||||
url = "/prologue/"
|
||||
|
||||
[[opensource]]
|
||||
name = "Opensource"
|
||||
weight = 11
|
||||
identifier = "opensource"
|
||||
url = "/opensource/"
|
||||
|
||||
[[agent]]
|
||||
name = "Agent"
|
||||
weight = 12
|
||||
identifier = "agent"
|
||||
url = "/agent/"
|
||||
|
||||
[[enterprise]]
|
||||
name = "Enterprise"
|
||||
weight = 13
|
||||
identifier = "enterprise"
|
||||
url = "/enterprise/"
|
||||
|
||||
|
||||
[[factory]]
|
||||
name = "Factory"
|
||||
weight = 14
|
||||
identifier = "factory"
|
||||
url = "/factory/"
|
||||
|
||||
[[vault]]
|
||||
name = "Vault"
|
||||
weight = 15
|
||||
identifier = "vault"
|
||||
url = "/vault/"
|
||||
|
||||
[[hub]]
|
||||
name = "Hub"
|
||||
weight = 16
|
||||
identifier = "hub"
|
||||
url = "/hub/"
|
||||
|
||||
[[main]]
|
||||
name = "Homepage"
|
||||
url = "https://kerberos.io"
|
||||
weight = 12
|
||||
|
||||
[[social]]
|
||||
name = "Twitter"
|
||||
pre = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" 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\"></path></svg>"
|
||||
url = "https://twitter.com/kerberosio"
|
||||
weight = 10
|
||||
|
||||
[[social]]
|
||||
name = "GitHub"
|
||||
pre = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" 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\"></path></svg>"
|
||||
url = "https://github.com/kerberos-io"
|
||||
post = "v0.1.0"
|
||||
weight = 20
|
||||
|
||||
[[social]]
|
||||
name = "Reddit"
|
||||
pre = "<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-message-circle\"><path d=\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\"></path></svg>"
|
||||
url = "https://www.reddit.com/r/kerberos_io/"
|
||||
weight = 30
|
||||
|
||||
[[footer]]
|
||||
name = "Agent"
|
||||
url = "https://kerberos.io/product/open-source/"
|
||||
weight = 10
|
||||
|
||||
[[footer]]
|
||||
name = "Factory"
|
||||
url = "https://kerberos.io/product/enterprise-agent/"
|
||||
weight = 11
|
||||
|
||||
[[footer]]
|
||||
name = "Vault"
|
||||
url = "https://kerberos.io/product/vault/"
|
||||
weight = 12
|
||||
|
||||
[[footer]]
|
||||
name = "Hub"
|
||||
url = "https://kerberos.io/product/hub/"
|
||||
weight = 13
|
||||
@@ -1,58 +0,0 @@
|
||||
# Meta Data for SEO
|
||||
|
||||
## Homepage
|
||||
title = "Kerberos Docs"
|
||||
titleSeparator = "-"
|
||||
titleAddition = "Video surveillance for everyone"
|
||||
description = "Open and extensible video surveillance and analytics solution for everyone at any location."
|
||||
|
||||
## Open Graph + Twitter Cards
|
||||
images = ["doks.png"]
|
||||
twitterSite = "kerberosio"
|
||||
twitterCreator = "kerberosio"
|
||||
#facebookAuthor = "verlinde.henk"
|
||||
#facebookPublisher = "verlinde.henk"
|
||||
ogLocale = "en_US"
|
||||
|
||||
## JSON-LD
|
||||
schemaType = "Organization"
|
||||
schemaLogo = "logo-doks.png"
|
||||
schemaTwitter = "https://twitter.com/kerberosio"
|
||||
#schemaLinkedIn = "https://www.linkedin.com/in/henkverlinde/"
|
||||
schemaGitHub = "https://github.com/kerberos-io"
|
||||
schemaSection = "blog"
|
||||
|
||||
## Sitelinks Search Box
|
||||
siteLinksSearchBox = false
|
||||
|
||||
## Chrome Browser
|
||||
themeColor = "#fff"
|
||||
|
||||
# Images
|
||||
quality = 85
|
||||
bgColor = "#fff"
|
||||
landscapePhotoWidths = [900, 800, 700, 600, 500]
|
||||
portraitPhotoWidths = [800, 700, 600, 500]
|
||||
lqipWidth = "20x"
|
||||
|
||||
# Footer
|
||||
footer = "Powered by <a href=\"https://www.github.com/\">GitHub</a>, <a href=\"https://gohugo.io/\">Hugo</a>, and <a href=\"https://getdoks.org/\">Doks</a>"
|
||||
copyrightSince = 2014
|
||||
|
||||
# Alert
|
||||
alert = false
|
||||
alertText = "Like Doks? <a class=\"alert-link\" href=\"https://github.com/h-enk/doks/stargazers\">Star on GitHub</a>. Thanks!</a>"
|
||||
|
||||
# Edit Page
|
||||
docsRepo = "https://github.com/kerberos-io/documentation"
|
||||
editPage = true
|
||||
|
||||
[options]
|
||||
lazySizes = true
|
||||
clipBoard = true
|
||||
instantPage = true
|
||||
flexSearch = true
|
||||
darkMode = true
|
||||
bootStrapJs = false
|
||||
breadCrumb = false
|
||||
highLight = true
|
||||
@@ -1,2 +0,0 @@
|
||||
baseurl = "https://doks-next.netlify.app/"
|
||||
canonifyURLs = true
|
||||
@@ -1,32 +0,0 @@
|
||||
const autoprefixer = require('autoprefixer');
|
||||
const purgecss = require('@fullhuman/postcss-purgecss');
|
||||
const whitelister = require('purgecss-whitelister');
|
||||
|
||||
module.exports = {
|
||||
plugins: [
|
||||
autoprefixer(),
|
||||
purgecss({
|
||||
content: [
|
||||
'./layouts/**/*.html',
|
||||
'./content/**/*.md',
|
||||
],
|
||||
safelist: [
|
||||
'lazyloaded',
|
||||
'table',
|
||||
'thead',
|
||||
'tbody',
|
||||
'tr',
|
||||
'th',
|
||||
'td',
|
||||
...whitelister([
|
||||
'./assets/scss/components/_doks.scss',
|
||||
'./assets/scss/components/_code.scss',
|
||||
'./assets/scss/components/_search.scss',
|
||||
'./assets/scss/common/_dark.scss',
|
||||
'./assets/scss/_kerberos-config.scss',
|
||||
'./assets/scss/_kerberos.scss',
|
||||
]),
|
||||
],
|
||||
}),
|
||||
],
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
baseurl = "https://doc.kerberos.io/"
|
||||
canonifyURLs = true
|
||||
docsRepo = "https://github.com/kerberos-io/documentation"
|
||||
editPage = true
|
||||
@@ -1 +0,0 @@
|
||||
env = "production"
|
||||
@@ -1,4 +0,0 @@
|
||||
baseurl = "https://staging.doc.kerberos.live/"
|
||||
canonifyURLs = true
|
||||
docsRepo = "https://github.com/kerberos-io/documentation"
|
||||
editPage = true
|
||||
@@ -1 +0,0 @@
|
||||
env = "staging"
|
||||
@@ -1,48 +0,0 @@
|
||||
---
|
||||
title: "Introduction"
|
||||
description: "And so it began. The ecosystem of Kerberos.io"
|
||||
lead: "And so it began. The ecosystem of Kerberos.io"
|
||||
date: 2020-10-06T08:48:57+00:00
|
||||
lastmod: 2020-10-06T08:48:57+00:00
|
||||
draft: false
|
||||
images: []
|
||||
menu:
|
||||
docs:
|
||||
parent: "prologue"
|
||||
weight: 100
|
||||
toc: true
|
||||
---
|
||||
|
||||
The **Kerberos.io** project, pronounced as `/kuh buh ruhs dot ai o/`, is a video analytics and video management platform, which was initiated back in 2014. Over the years it has evolved into a stable and feature-rich video platform, which is used for management and analytics such as machine learning.
|
||||
|
||||
To set the expectations of what is possible and how, it's recommended to have a look [at the architectures page](/prologue/deployments/) to find the best, or most reasonable architecture for your use case.
|
||||
|
||||
## Kerberos.io
|
||||
|
||||
Many people are confused, and don't understand why this project is called Kerberos.io. If you've been in the IT world for a while you will notice that Kerberos is already used for the authentication protocol [Kerberos](https://en.wikipedia.org/wiki/Kerberos_(protocol)).
|
||||
|
||||
We believe that the name Kerberos.io makes sense for this project as well, with a strong emphasize on the suffix **.io**, which stands for input and output devices (e.g. any type of camera). Kerberos.io can be seen as a kind of security protocol for images and recordings.
|
||||
|
||||
## Why Kerberos.io
|
||||
|
||||
Kerberos.io initiated as a side project, due to inspiration and motivation in the space of video analytics, computer vision and machine learning. Its first focus was video surveillance only, as nowadays burglary or attacks are very common in this world.
|
||||
|
||||
Due to this, our first mission is to provide every human being on this planet with a solution, a video platform, to protect its families, friends, homes or anything else which you think is important.
|
||||
|
||||
Our second mission is to make this video platform affordable and Open Source (MIT), and develop it in such a way, that it's using the latest technologies, to create a seamless, never-seen and delicious user experience.
|
||||
|
||||
While we moved forward our third mission is to scale, and make Kerberos reach far beyond a traditional video platform. With the rise of [Kerberos Enterprise Suite](/enterprise/first-things-first), we now focus on large scale deployments (covering thousands of cameras), and video analytics through machine learning.
|
||||
|
||||
## What is Kerberos.io
|
||||
|
||||
Kerberos.io is a video analytics and monitoring platform, that is focussing on both end-consumer and enterprises. It comes with modular solutions to support small deployments, a couple of camera streams and larger deployments, with multiple sites and thousands of camera streams.
|
||||
|
||||
{{< figure src="kerberos-agent-edge.svg" alt="A Kerberos Agent is monitoring a single camera stream." caption="A Kerberos Agent is monitoring a single camera stream." class="stretch">}}
|
||||
|
||||
With Kerberos.io you start small with one or more [Kerberos Agents](/opensource/first-things-first/), and grow over time while introducing more and more components like [Kerberos Factory](/factory/first-things-first/), [Kerberos Vault](/vault/first-things-first/) and [Kerberos Hub](/hub/first-things-first/), which is also referred to as the [Kerberos Enterprise Suite](/enterprise/first-things-first/). Kerberos.io is shipped through the concept of container technology such as Docker and Kubernetes, and implements the ideas of bring your own cloud, bring your own storage and bring your own technology.
|
||||
|
||||
{{< figure src="./kerberos-global.svg" alt="A scalable video platform for an ever-growing video landscape." caption="A scalable video platform for an ever-growing video landscape." class="stretch">}}
|
||||
|
||||
The whole idea is that any solution you will find at Kerberos.io, is extensible and allows you to integrate by default. For example, you decide where to deploy the solutions (edge/cloud/hybrid), what storage you want (edge/cloud/hybrid), how to integrate it with other third-party solutions, etc. Every solution you'll find in the Kerberos.io space, ships Swagger APIs by default, and will allow you to build your own applications or integrations.
|
||||
|
||||
Machine learning and Artificial Intelligence is a critical component of the Kerberos.io ecosystem. Within Kerberos Vault you can integrate your own machine learning models, and run them at scale. [Learn more about how we support](/vault/machine-learning/) machine learning use cases.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
title: "Agent"
|
||||
description: ""
|
||||
lead: ""
|
||||
date: 2020-10-06T08:49:15+00:00
|
||||
lastmod: 2020-10-06T08:49:15+00:00
|
||||
draft: false
|
||||
images: []
|
||||
---
|
||||
@@ -1,53 +0,0 @@
|
||||
---
|
||||
title: "Announcement"
|
||||
description: "A Kerberos Agent with more features, better performance, and great UX."
|
||||
lead: "A Kerberos Agent with more features, better performance, and great UX."
|
||||
date: 2020-10-06T08:49:31+00:00
|
||||
lastmod: 2020-10-06T08:49:31+00:00
|
||||
draft: false
|
||||
images: []
|
||||
menu:
|
||||
agent:
|
||||
parent: "agent"
|
||||
weight: 300
|
||||
toc: true
|
||||
---
|
||||
|
||||
Kerberos Agent is the next generation of Kerberos.io, and is the successor of Kerberos Open Source (v1/v2). More specifically it will replace and merge the [machinery](https://github.com/kerberos-io/machinery) and [web](https://github.com/kerberos-io/web) repositories. A switch in technologies and architecture has been made. Kerberos Agent is still under active development, and not yet released. The progress can be followed at the [develop branch](https://github.com/kerberos-io/opensource/tree/develop) and [project overview](https://github.com/kerberos-io/opensource/projects/1).
|
||||
|
||||
## What is changing?
|
||||
|
||||
Bottom line, we are rebuilding the project from scratch using a different technology stack. We are saying goodbye to C++, PHP (Laravel), BackboneJS and saying hello to Golang and React. Despite the technology changes, we are also changing the architecture which was put in place a couple of years ago. The biggest change is to run the show inside a single repository, and no longer over seperate repos (machinery and web). Read more about this in the FAQ.
|
||||
|
||||
{{< figure src="opensource-to-agent.svg" alt="The Kerberos Agent is a complete new rewrite of the Kerberos Open Source version 1 and 2." caption="The Kerberos Agent is a complete new rewrite of the Kerberos Open Source version 1 and 2." class="stretch">}}
|
||||
|
||||
## FAQ
|
||||
|
||||
### 1. Why a mono repo?
|
||||
|
||||
We have noticed in the past (v1 and v2) that splitting the repositories (machinery and web), created a lot of confusion within our community. People didn't understand the different versions and so on. This caused a lack of collaboration, and made it impossible for some people to collaborate and contribute.
|
||||
|
||||
Having a mono repo, which is well-organised, simplifies the entry point for new people who would like to use, understand and/or contribute to Kerberos Agent.
|
||||
|
||||
### 2. Why a change in technologies?
|
||||
|
||||
In previous versions (v1 and v2) we used technologies like C++, PHP and BackboneJS. 7 years ago this was still acceptable, however time has changed and new technologies such as React and Golang became very popular.
|
||||
|
||||
Due to previous reason we have decided to rebuild the Kerberos Open Source technology from scratch, taking into account all the feedback we acquired over the years. Having these technologies available, we will enable more people to contribute and use our technology.
|
||||
|
||||
### 3. How is the Kerberos Enterprise Suite involved?
|
||||
|
||||
We started the developments of the Kerberos Enterprise Suite a year ago (January, 2020), our focus here was scalability, fast development and easy deployment. We noticed that with technologies such as Golang and React, we can still provide a highly performant video surveillance system.
|
||||
|
||||
The Kerberos Agent which is currently part of the Kerberos Enterprise Suite will be open sourced and become the one and only engine for video stream capturing, motion detection, etc.
|
||||
|
||||
The Kerberos Agent will be used both in the open source as the B2B communities. Other solutions such as Factory, Vault and Hub will be made available through different licensing.
|
||||
|
||||
### 4. When are we going to be able to install the first version?
|
||||
|
||||
We plan to ship the **first version by the end of Q1**, afterwards we will add more and more features as usual.
|
||||
|
||||
|
||||
### 5. Change in License
|
||||
|
||||
Kerberos Agent is now available under the MIT license.
|
||||
|
Before Width: | Height: | Size: 77 KiB |
@@ -1,41 +0,0 @@
|
||||
---
|
||||
title: "License"
|
||||
description: ""
|
||||
lead: ""
|
||||
date: 2020-10-06T08:49:31+00:00
|
||||
lastmod: 2020-10-06T08:49:31+00:00
|
||||
draft: false
|
||||
images: []
|
||||
menu:
|
||||
agent:
|
||||
parent: "agent"
|
||||
weight: 301
|
||||
toc: true
|
||||
---
|
||||
|
||||
Kerberos Agent is an open source solution that is made available free of charge. The solution and its source code is maintained by the Kerberos.io development team and open source community, and made available through source code, and binaries through a Docker container. Kerberos Agent, and its related binaries, can be used under the MIT license.
|
||||
|
||||
## The MIT License (MIT)
|
||||
|
||||
Copyright © `2021` `Kerberos.io`
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the “Software”), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
title: "Enterprise"
|
||||
description: ""
|
||||
lead: ""
|
||||
date: 2020-10-06T08:49:15+00:00
|
||||
lastmod: 2020-10-06T08:49:15+00:00
|
||||
draft: false
|
||||
images: []
|
||||
---
|
||||
|
Before Width: | Height: | Size: 118 KiB |
@@ -1,74 +0,0 @@
|
||||
---
|
||||
title: "First things first"
|
||||
description: "Kerberos Enterprise Suite - A revolutionary design to scale your video landscape."
|
||||
lead: "Kerberos Enterprise Suite - A revolutionary design to scale your video landscape."
|
||||
date: 2020-10-06T08:49:31+00:00
|
||||
lastmod: 2020-10-06T08:49:31+00:00
|
||||
draft: false
|
||||
images: []
|
||||
menu:
|
||||
enterprise:
|
||||
parent: "enterprise"
|
||||
weight: 300
|
||||
toc: true
|
||||
---
|
||||
|
||||
Kerberos Enterprise Suite is a consequence of supporting enterprises and customers for more than 7 years in the video analytics and video streaming industry. Kerberos Enterprise Suite is a collection of best practices supporting the ever-growing needs of enterprises rolling out huge amounts of video streams, requiring extreme flexibility in terms of deployment and customization, and putting strong focus on video analytics and more specific machine learning and AI.
|
||||
|
||||
As a result to the developments of the Kerberos Agent, previously called Kerberos Open Source, the Kerberos Enterprise Suite is here to enable more flexibility through concepts such as Bring Your Own Cloud, Bring Your Own Storage and Bring Your Own Technology.
|
||||
|
||||
Kerberos Enterprise Suite is taking the Kerberos Agent to another level, by building additional tools on top such as [Kerberos Vault](/vault/first-things-first) and [Kerberos Hub](/vault/first-things-first). It scales your Kerberos Agents through the concept of [Kerberos Factory](/factory/first-things-first) which helps to deploy your Kerberos Agents in bulk.
|
||||
|
||||
## Kubernetes: flexible and scale
|
||||
|
||||
Kubernetes is a proven, and a widely spread technology which is gaining more momentum every single day. Although many enterprises still have to adopt and embrace Kubernetes, many already do. It's just a matter of time.
|
||||
|
||||
{{< figure src="kubernetes-enterprise.svg" alt="" caption="" class="stretch">}}
|
||||
|
||||
Kubernetes sits at the center of the Kerberos Enterprise Suite. Every solution within the suite is build on top of Kubernetes, so it allows you to bring your own cloud, bring your own storage and bring your own technology.
|
||||
|
||||
### Bring your own cloud
|
||||
|
||||
By using Kubernetes as a basis for [Kerberos Factory](/factory/first-things-first), [Kerberos Vault](/vault/first-things-first) and [Kerberos Hub](/vault/first-things-first), all solutions can be deployed where your Kubernetes cluster can be deployed. This means you can deploy at the edge, in a private or public cloud. As the solutions are modular build, you can also have hybrid deployments. For example processing at the edge and visualisation in a cloud environment, or storage at the edge and limited storage in a cloud environment.
|
||||
|
||||
### Bring your own storage
|
||||
|
||||
One thing you don't want, is to store your most precious data on someone else storage. We believe you should be the one and only owner of your data, and therefore we have build [Kerberos Vault](/vault/first-things-first), in such a way that you bring you own storage. Bringing your own storage is great, but actually you want to bring multiple storage providers, for example edge storage and cloud storage. The concept of keeping a vast amount of storage at the edge, and [forward only the most important data](/vault/forwarding/) to a cloud environment, is a core feature of [Kerberos Vault](/vault/first-things-first).
|
||||
|
||||
### Bring your own technology
|
||||
|
||||
Kubernetes brings a lot of advantages in terms of deployment, scalability, resilience, and also high availability, but there is more. Due to the nature of Kubernetes, enterprises and administrators can bring any tool, service, solution or application inside their cluster. As the Kubernetes Enterprise Suite has specific dependencies, there is no need to install already existing tools, but you can reuse the ones you already have.
|
||||
|
||||
Next to that, all solutions within the Kerberos Enterprise Suite ships Swagger APIs by default. This allows you to extend or integrate your own solutions or extend them with the technology you already master or prefer within your organisation.
|
||||
|
||||
## The solution stack
|
||||
|
||||
The Kerberos Enterprise Suite is a collection of modular solutions that can be deployed wherever you want. It contains three crucial parts.
|
||||
|
||||
- Kerberos Agents and Kerberos Factory
|
||||
- Kerberos Vault
|
||||
- Kerberos Hub
|
||||
|
||||
### Kerberos Agents and Kerberos Factory
|
||||
|
||||
An agent is deployed for each video stream. An agent is responsible for a specific video stream: recording, livestreaming and alerting. Kerberos Factory is used to scale and deploy the Kerberos Agents in your Kubernetes clusters by providing a UI.
|
||||
|
||||
{{< figure src="kerberos-enterprise-suite.svg" alt="Kerberos Enterprise Suite contains Kerberos Agent, Kerberos Factory, Kerberos Vault and Kerberos Hub." caption="Kerberos Enterprise Suite contains Kerberos Agent, Kerberos Factory, Kerberos Vault and Kerberos Hub." class="stretch">}}
|
||||
|
||||
### Kerberos Vault
|
||||
|
||||
Kerberos Agents are persisting their recordings at a central place, which we call Kerberos Vault. Within Kerberos Vault you set up multiple edge or cloud storage providers, to persist your data at the edge or in the cloud.
|
||||
|
||||
{{< figure src="vault-edge-cloud-storage.svg" alt="Bring your own storage using Vault" caption="Bring your own storage using Kerberos Vault" class="stretch">}}
|
||||
|
||||
Events and messages [are sent through integrations](/vault/integrations/) to initiate custom processes and applications; for example [a machine learning model](/vault/machine-learning/). Edge and cloud storage are combined and can be enabled in forwarding mode, so only a subset of recordings is persisted in cloud storage.
|
||||
|
||||
{{< figure src="vault-forwarding-chaining.svg" alt="Synchronise recordings between multiple Kerberos Vaults." caption="Synchronise recordings between multiple Kerberos Vaults." class="stretch">}}
|
||||
|
||||
### Kerberos Hub
|
||||
|
||||
[Kerberos Hub](/vault/first-things-first) is a scale UI that consolidates the entire Kerberos ecosystem. It shows livestreams/alerts from your Kerberos Agents and recordings stored in Kerberos Vault through a single pane of glass.
|
||||
|
||||
[Kerberos Hub](/vault/first-things-first) is build out of modular and scalable microservices which you can install and scale independently, wherever you want.
|
||||
|
||||
{{< figure src="hub-with-vault.svg" alt="Kerberos Vault connected to Kerberos Hub." caption="Kerberos Vault connected to Kerberos Hub." class="stretch">}}
|
||||
|
Before Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 131 KiB |
|
Before Width: | Height: | Size: 471 KiB |
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "Usecases"
|
||||
description: "Customers using the Kerberos Enterprise Suite."
|
||||
lead: "Customers using the Kerberos Enterprise Suite."
|
||||
date: 2020-10-06T08:49:31+00:00
|
||||
lastmod: 2020-10-06T08:49:31+00:00
|
||||
draft: true
|
||||
images: []
|
||||
menu:
|
||||
enterprise:
|
||||
parent: "enterprise"
|
||||
weight: 300
|
||||
toc: true
|
||||
---
|
||||
|
||||
-> Sorry, to be written. We have a couple of customer stories available.
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
title: "Enterprise"
|
||||
description: ""
|
||||
lead: ""
|
||||
date: 2020-10-06T08:49:15+00:00
|
||||
lastmod: 2020-10-06T08:49:15+00:00
|
||||
draft: false
|
||||
images: []
|
||||
---
|
||||
@@ -1,32 +0,0 @@
|
||||
---
|
||||
title: "First things first"
|
||||
description: "A revolutionary design to scale your video analytics and video surveillance landscape."
|
||||
lead: "A revolutionary design to scale your video analytics and video surveillance landscape."
|
||||
date: 2020-10-06T08:49:31+00:00
|
||||
lastmod: 2020-10-06T08:49:31+00:00
|
||||
draft: false
|
||||
images: []
|
||||
menu:
|
||||
factory:
|
||||
parent: "factory"
|
||||
weight: 300
|
||||
toc: true
|
||||
---
|
||||
|
||||
Kerberos Factory brings the Kerberos Agent to another level. The Kerberos Agent can be deployed anywhere you want, it can run as a binary, Docker container and inside a Kubernetes cluster. The latter is where Kerberos Factory shines, it is a UI that allows you to deploy and configure your Kerberos Agents into your Kubernetes cluster more easily.
|
||||
|
||||
{{< figure src="kerberos-enterprise-suite.svg" alt="Kerberos Enterprise Suite contains Kerberos Agent, Kerberos Factory, Kerberos Vault and Kerberos Hub." caption="Kerberos Enterprise Suite contains Kerberos Agent, Kerberos Factory, Kerberos Vault and Kerberos Hub." class="stretch">}}
|
||||
|
||||
## Kerberos Factory in a nutshell
|
||||
|
||||
Kerberos Factory is a front-end that consumes and interacts with the Kubernetes API. It schedules Kerberos Agents as Kubernetes resource, and more specific `deployments`. For every camera stream a Kerberos Agent is created as a Kubernetes deployment.
|
||||
|
||||
Through the front-end an administrator can configure or add more Kerberos Agents to the cluster. The administrator has the ability to interact with the Kerberos Agent through one or more configuration screens, to tune and optimize the Kerberos Agent.
|
||||
|
||||
### ONVIF discovery
|
||||
|
||||
Kerberos Factory allows you to scan the local network and create Kerberos Agents for every discovered camera. Once discovered, Kerberos Factory will create a Kubernetes deployment for every Kerberos Agent.
|
||||
|
||||
### Global settings
|
||||
|
||||
Instead of tuning all your Kerberos Agent, Kerberos Factory allows you to set up global settings which are inherited by all your Kerberos Agents.
|
||||
|
Before Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 5.7 MiB |
|
Before Width: | Height: | Size: 12 MiB |
|
Before Width: | Height: | Size: 9.5 MiB |
|
Before Width: | Height: | Size: 16 MiB |
@@ -1,156 +0,0 @@
|
||||
---
|
||||
title: "Getting Started"
|
||||
description: "What to expect from the Kerberos Factory."
|
||||
lead: "What to expect from the Kerberos Factory."
|
||||
date: 2020-10-06T08:49:31+00:00
|
||||
lastmod: 2020-10-06T08:49:31+00:00
|
||||
draft: false
|
||||
images: []
|
||||
menu:
|
||||
factory:
|
||||
parent: "factory"
|
||||
weight: 301
|
||||
toc: true
|
||||
---
|
||||
|
||||
|
||||
Once you've installed Kerberos Factory, you will have the web application running inside your cluster. This web application allows you to administrate and automate the creation of your Kerberos Agents through the concept of [Kubernetes deployments](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) and pods.
|
||||
|
||||
Important to note is that this web application is relying [on the official Golang Kubernetes API](https://github.com/kubernetes/client-go), so that means from an administration point of view, you could simply use the well known `kubectl` command instead. The web application adds some functionalities on top of the Kubernetes API, which are specific to a Kerberos Agent; for example region of interests, livestreaming settings, etc.
|
||||
|
||||
## Login page
|
||||
|
||||
Once you open a browser, and navigate to the web application (see installation for the url), you will land on the login page.
|
||||
|
||||
{{< figure src="login.gif" alt="Login into the Kerberos Factory interface." caption="Login into the Kerberos Factory interface." class="stretch">}}
|
||||
|
||||
The default username password, specified in the [`deployment.yaml`](https://github.com/kerberos-io/enterprise/blob/master/yaml/factory/deployment.yaml#L54) is:
|
||||
|
||||
- username: **root**
|
||||
- password: **kerberos**
|
||||
|
||||
> The username and password [can be changed in the `deployment.yaml` file](https://github.com/kerberos-io/factory/blob/master/yaml/deployment.yaml#L34-L37).
|
||||
|
||||
## Overview
|
||||
|
||||
On the overview page you will find an intuitive overview of the different pages and functionalities. As Kerberos Factory is running on top of a Kubernetes cluster, Kerberos Agents are deployed as Kubernetes deployments.
|
||||
|
||||
Kerberos Factory allows you to inspect and configure your Kerberos Agents, but also provide an overview of the Kubernetes nodes and pods.
|
||||
|
||||
{{< figure src="overview.gif" alt="Review your Docker or Kubernetes agents." caption="Review your Docker or Kubernetes agents." class="stretch">}}
|
||||
|
||||
On the left menu you will find pages are available:
|
||||
|
||||
- Settings: the global settings which are inherited by Kerberos Agents.
|
||||
- Camera: a list of all the Kerberos Agents running in your cluster.
|
||||
- Nodes: a list of all the nodes in your cluster.
|
||||
- Pods: all the pods running in your cluster.
|
||||
|
||||
## Nodes
|
||||
|
||||
The nodes section lists all the available nodes inside your Kubernetes cluster. It shows a limited amount of information such as the version, the number of Docker images installed on the node, and some basic hardware information.
|
||||
|
||||
{{< figure src="nodes.gif" alt="Get an entire list of nodes which are connected to your Kubernetes cluster." caption="Get an entire list of nodes which are connected to your Kubernetes cluster." class="stretch">}}
|
||||
|
||||
## Cameras
|
||||
|
||||
The cameras section will list all the Kerberos Agents (running as deployments) that you have deployed inside your cluster. This page gives you access to deploy new Kerberos Agents. Next to that you can easily upgrade Kerberos Agents to a newer version, reboot them, view logging and update the configuration options of the Kerberos Agent.
|
||||
|
||||
{{< figure src="deployments.gif" alt="Get a list of all your Kerberos Agents." caption="Get a list of all your Kerberos Agents." class="stretch">}}
|
||||
|
||||
### Adding a new deployment
|
||||
|
||||
By specifying a name for your Kerberos Agent, and it's corresponding RTSP url, a new Kubernetes deployment will be created for you, and a Kuebrnetes pod will be deployed to one of your installed nodes.
|
||||
|
||||
{{< figure src="add-kerberos-agent.gif" alt="Deploy a single Kerberos Agent or in bulk." caption="Deploy a single Kerberos Agent or in bulk." class="stretch">}}
|
||||
|
||||
### Configuring a deployment
|
||||
|
||||
Once you have a running Kerberos Agent, you should see a green circle next to the deployment, indicating that it is successfully running. At any time you can configure your Kerberos Agent by clicking on the <SettingsIcon className="pointer"/> icon. This will open a popup, allowing you to change some settings.
|
||||
|
||||
{{< figure src="configure-kerberos-agent.gif" alt="Once you created the Kerberos Agent, you can configure the agent." caption="Once you created the Kerberos Agent, you can configure the agent." class="stretch">}}
|
||||
|
||||
Following settings can be changed:
|
||||
|
||||
- One or more regions of interest,
|
||||
- Time based conditions,
|
||||
- Pre- and post recording
|
||||
- Continuous recording
|
||||
- Linking to [Kerberos Hub Saas](/hub/first-things-first) or [Kerberos Vault](/vault/first-things-first)
|
||||
|
||||
### Global configuration
|
||||
|
||||
Configuration can be specified in a Kerberos Agent, this means that you update the configuration of a specific Kubernetes deployment. However, this can also be specified at a higher level. This higher level is what we call the global configuration.
|
||||
|
||||
By specifying configurations at a higher level, any Kerberos Agents will inherit from that configuration. This is improving the overall maintenance and management of your Kerberos Agents.
|
||||
|
||||
{{< figure src="global-settings.gif" alt="You can specify the configurations on a global level, so all Kerberos Agents will inherit from that." caption="You can specify the configurations on a global level, so all Kerberos Agents will inherit from that." class="stretch">}}
|
||||
|
||||
### Upgrade or reboot a Kerberos Agent
|
||||
|
||||
At Kerberos, we have agile development cycles, which means that new versions will be released every day, week or month. To make sure you can upgrade or downgrade these Kerberos Agent easily, an upgrade feature is built-in. When pressing the upgrade button, you will be able to select the version to which you would like to upgrade or downgrade. Once submitted, **a zero downtime upgrade will take place**. Kubernetes will download the new release, create a new pod, and destroy the old one.
|
||||
|
||||
At any moment you can reboot one of your Kerberos Agents. When pressing the reboot button, next to your deployment, Kubernetes will destroy the pod of your deployment, and schedule a new one.
|
||||
|
||||
{{< figure src="upgrade-kerberos-agent.gif" alt="You can specify the configurations on a global level, so all agents will inherit from that." caption="You can specify the configurations on a global level, so all agents will inherit from that." class="stretch">}}
|
||||
|
||||
## Pods
|
||||
|
||||
When creating a Kerberos Agent, Kubernetes will create a Kubernetes deployment and schedule a pod. The pod will be managed by your deployment, and deployed as a container to one of your available nodes. Once a pod dies/ crashes, or whatever unexpected scenario, the deployment will make sure it is deployed again to a different (or the same) node. This makes sure the Kerberos Agent is in a healthy state at all times.
|
||||
|
||||
{{< figure src="pods.gif" alt="When creating a deployment, a Kubernetes pod has created and assigned to a node." caption="When creating a deployment, a Kubernetes pod has created and assigned to a node." class="stretch">}}
|
||||
|
||||
## Storage and video management
|
||||
|
||||
Kerberos Factory allows you to scale your video landscape horizontally, using the concept of Kubernetes, and brings a strong backbone for stability and performance. It allows you to avoid reinventing the wheel, and get stuck in the numerous challenges of developing a scalable video platform.
|
||||
|
||||
Kerberos Agents store their recordings locally for a short period. This means that long-term storage is not included in the solution. On top of that it also does not have a visual component, which allows you te review dashboards or recordings. To overcome these two challenges, long-term storage with extensibility/integration capabilities and visualisation features, following solutions were developed [Kerberos Vault](/storage/introduction) and [Kerberos Hub](/cloud).
|
||||
|
||||
### Kerberos Vault
|
||||
|
||||
[Kerberos Vault](/vault/first-things-first) is a solution which makes it possible to store recordings from Kerberos Agents (across different clusters) at a central place, on the storage provider you want. You can store your recordings in the cloud (AWS S3, Google Cloud Storage, Azure Blob storage) or at the edge (Minio, Ceph).
|
||||
|
||||
On the other hand it's an open platform, as it allows you build extensions and integrations (web apps, mobile apps, machine learning services much more). Kerberos Vault ships with the ability of real-time messaging (Kafka), and a REST API (documented as Swagger).
|
||||
|
||||
{{< figure src="vault-cloud-storage.svg" alt="Kerberos Vault allows you to centralise your recordings and build integrations." caption="Kerberos Vault allows you to centralise your recordings and build integrations." class="stretch">}}
|
||||
|
||||
To connect one or more Kerberos Agents to your Kerberos Vault instance, you should open the configuration option and navigate to the `cloud` tab. After selected you need to fill-in the credentials from your Kerberos Vault account.
|
||||
To connect one or more Kerberos Agents to your Kerberos Vault instance, you should open the configuration option and navigate to the `cloud` tab. After selected you need to fill-in the credentials from your Kerberos Vault account.
|
||||
|
||||
- Kerberos Vault URI: this is the API endpoint of your Kerberos Vault instance. Usually this is in the following format: `http(s)://api.yourdomain.com`. Where `api.yourdomain.com` should match your Kerberos Vault API endpoint. If you are deploying Kerberos Vault at the edge, in the same cluster, you can use the internal DNS name, as following `http://kerberos-vault.kerberos-vault:8081`.
|
||||
|
||||
- Provider: the name of the provider, which you created on the Kerberos Vault providers page, to which you want to send your recordings to.
|
||||
|
||||
- Directory: this is the subdirectory in which your files will be stored. At the time of writing this should also equal your Kerberos Hub username, if you plan to upload to Kerberos Hub.
|
||||
|
||||
- Access Key: this should match the access key of one of your Kerberos Vault accounts.
|
||||
|
||||
- Secret Key: this should match the secret key of one of your Kerberos Vault accounts.
|
||||
|
||||
{{< figure src="kerberos-factory-kerberos-vault.gif" alt="Using Kerberos Vault you can bring your own storage, and store the recordings of your agents in your own storage provider." caption="Using Kerberos Vault you can bring your own storage, and store the recordings of your agents in your own storage provider." class="stretch">}}
|
||||
|
||||
### Kerberos Hub
|
||||
|
||||
For the visualisation part Kerberos Hub comes into the picture. Kerberos Hub is a web app, backed up with a number of microservices, that shows dashboards, live streams, filter recordings and much more. Learn more [about the features and functions here](/cloud).
|
||||
|
||||
You have two choices when using Kerberos Hub, either you send your recordings from your Kerberos Agents directly to Kerberos Hub, or you send your recordings to Kerberos Vault, and connect Kerberos Vault to Kerberos Hub. About the latter more is explained on the [Kerberos Vault page](/storage/get-started).
|
||||
|
||||
Select the Kerberos Hub option, and copy-paste the credentials from your Kerberos Hub subscription.
|
||||
|
||||
{{< figure src="kerberos-factory-kerberos-hub.gif" alt="By linking the Kerberos Agent to Kerberos Hub, your recordings and livestreams will become available online." caption="By linking your Enterprise agent to Kerberos Hub, your recordings and livestreams will become available online." class="stretch">}}
|
||||
|
||||
- Proxy URI: this is a proxy service which moves the recording in the Kerberos Hub SAAS version. By default `http://proxy.kerberos.io`.
|
||||
|
||||
- Region: this is the region where your recordings will be stored. Only `eu-west-1` for now (will change, on the roadmap).
|
||||
|
||||
- Bucket: the name of the Kerberos Hub bucket. Only `kerberosaccept` for now (will change, on the roadmap).
|
||||
|
||||
- Directory: this is your personal directory, and matches your Kerberos Hub username.
|
||||
|
||||
In the Kerberos Hub section (next to persistence) provide following information
|
||||
|
||||
- API url: the url of the Kerberos Hub endpoint. By default `https://api.cloud.kerberos.io` for our Kerberos Hub SAAS version.
|
||||
|
||||
- Public Key: this should match the public key of your Kerberos Hub subscription.
|
||||
|
||||
- Private Key: this should match the private key of your Kerberos Hub subscription.
|
||||
|
Before Width: | Height: | Size: 19 MiB |
|
Before Width: | Height: | Size: 3.7 MiB |
|
Before Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 7.0 MiB |
|
Before Width: | Height: | Size: 1.7 MiB |
|
Before Width: | Height: | Size: 6.7 MiB |
|
Before Width: | Height: | Size: 109 KiB |
|
Before Width: | Height: | Size: 70 KiB |
@@ -1,178 +0,0 @@
|
||||
---
|
||||
title: "Cloud Installation"
|
||||
description: ""
|
||||
lead: ""
|
||||
date: 2020-10-06T08:49:31+00:00
|
||||
lastmod: 2020-10-06T08:49:31+00:00
|
||||
draft: false
|
||||
images: []
|
||||
menu:
|
||||
factory:
|
||||
parent: "factory"
|
||||
weight: 303
|
||||
toc: true
|
||||
---
|
||||
|
||||
If not already the case, start by creating a Kubernetes cluster. This can be done though one of the hyperscalers (AWS, GCP, Azure), cloud providers (Digital Ocean, Scaleway, etc) or inside your private cloud; for the latter it is advised [to follow the edge installation](/factory/installation-edge).
|
||||
|
||||
{{< figure src="factory-cloud.svg" alt="Process your video streams in the cloud." caption="Process your video streams in the cloud" class="stretch">}}
|
||||
|
||||
## Installation
|
||||
|
||||
Before setting up Kerberos Factory, the first thing that we need to do is enabling RBAC permissions (Role Based Access Control). This needs to be enabled to query specific endpoints from the Kubernetes API. By default, these endpoints are blocked, so we need to unlock them.
|
||||
|
||||
First clone the configurations from the GitHub repository [kerberos-io/factory]( https://github.com/kerberos-io/factory).
|
||||
|
||||
git clone https://github.com/kerberos-io/factory
|
||||
|
||||
A best practice is to create a separate namespace for your Kerberos Factory and Kerberos Agent deployments.
|
||||
|
||||
kubectl create namespace kerberos-factory
|
||||
|
||||
Next go into the directory and execute the first Kubernetes configuration file `clusterrole.yaml`.
|
||||
|
||||
kubectl create -n kerberos-factory -f ./factory/yaml/clusterrole.yaml
|
||||
|
||||
This will make several APIs inside your Kubernetes cluster available. We need this to be able to create deployments from the factory web app through the Kubernetes Golang SDK.
|
||||
|
||||
### Helm
|
||||
|
||||
Next we will install a couple of dependencies which are required for Kerberos Factory. [**Helm**](https://helm.sh/) is a package manager for Kubernetes, it helps you to set up services more easily (this could be a MQTT broker, a database, etc).
|
||||
Instead of writing yaml files for every service we need, we use so-called Charts (libraries), that you can reuse and configure the, with the appropriate settings.
|
||||
|
||||
Use one of the preferred OS package managers to install the Helm client:
|
||||
|
||||
brew install helm
|
||||
|
||||
choco install kubernetes-helm
|
||||
|
||||
scoop install helm
|
||||
|
||||
gofish install helm
|
||||
|
||||
### Traefik
|
||||
|
||||
[**Traefik**](https://containo.us/traefik/) is a reverse proxy and load balancer which allows you to expose your deployments more easily. Kerberos uses Traefik to expose its APIs more easily.
|
||||
|
||||
Add the Helm repository and install traefik.
|
||||
|
||||
kubectl create namespace traefik
|
||||
helm repo add traefik https://helm.traefik.io/traefik
|
||||
helm install traefik traefik/traefik -n traefik
|
||||
|
||||
After installation, you should have an IP attached to Traefik service, look for it by executing the `get service` command. You will see the ip address in the `EXTERNAL-IP` attribute.
|
||||
|
||||
kubectl get svc
|
||||
|
||||
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
||||
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 36h
|
||||
--> traefik LoadBalancer 10.0.27.93 40.114.168.96 443:31623/TCP,80:31804/TCP 35h
|
||||
traefik-dashboard NodePort 10.0.252.6 <none> 80:31146/TCP 35h
|
||||
|
||||
Go to your DNS provider and link the domain you've configured in the first step `traefik.domain.com` to the IP address of thT `EXTERNAL-IP` attribute. When browsing to `traefik.domain.com`, you should see the traefik dashboard showing up.
|
||||
|
||||
### Ingress-Nginx (alternative for Traefik)
|
||||
|
||||
If you don't like `Traefik` but you prefer `Ingress Nginx`, that works as well.
|
||||
|
||||
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
|
||||
helm repo update
|
||||
kubectl create namespace ingress-nginx
|
||||
helm install ingress-nginx -n ingress-nginx ingress-nginx/ingress-nginx
|
||||
|
||||
### MongoDB
|
||||
|
||||
When using Kerberos Factory, it will generate configurations for every video stream deployed. These configuration files are persisted in a MongoDB database. As used before, we are using `helm` to install MongoDB in our Kubernetes cluster.
|
||||
|
||||
Have a look into the `./factory/yaml/mongodb/values.yaml` file, you will find plenty of configurations for the MongoDB helm chart. To change the username and password of the MongoDB instance, go ahead and [find the attribute where](https://github.com/kerberos-io/factory/blob/master/yaml/mongodb/values.yaml#L75) you can change the root password.
|
||||
|
||||
helm repo add bitnami https://charts.bitnami.com/bitnami
|
||||
kubectl create namespace mongodb
|
||||
helm install mongodb -n mongodb bitnami/mongodb --values ./factory/yaml/mongodb/values.yaml
|
||||
|
||||
Once installed successfully, we should verify if the password has been set correctly. Print out the password using `echo $MONGODB_ROOT_PASSWORD` and confirm the password is what you've specified in the `values.yaml` file.
|
||||
|
||||
export MONGODB_ROOT_PASSWORD=$(kubectl get secret -n mongodb mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)
|
||||
echo $MONGODB_ROOT_PASSWORD
|
||||
|
||||
### Kerberos Factory
|
||||
|
||||
The last step is to install the Kerberos Factory application. Kerberos Factory is responsible for installing and creating the kubernetes deployments inside your Kubernetes cluster.
|
||||
|
||||
#### Config Map
|
||||
|
||||
Kerberos Factory requires a MongoDB instance to be running, it uses it to store configuration files and other metrics. To specify those credentials a configmap is created and injected into the Kerberos Factory deployment.
|
||||
|
||||
Modify the MongoDB credentials, and make sure they match the credentials of your MongoDB instance.
|
||||
|
||||
- name: MONGODB_USERNAME
|
||||
value: "root"
|
||||
- name: MONGODB_PASSWORD
|
||||
--> value: "xxxxxxxxxx"
|
||||
|
||||
Create the config map.
|
||||
|
||||
kubectl apply -f ./factory/yaml/mongodb.config.yaml -n kerberos-factory
|
||||
|
||||
#### Deployment
|
||||
|
||||
Before installing Kerberos Factory, open the `./factory/yaml/deployment.yaml` configuration file. At the of the bottom file you will find two endpoints, similar to the Ingres file below. Update the hostnames to your own preferred domain, and add these to your DNS server or `/etc/hosts` file (pointing to the same IP as the Traefik/Ingress-nginx EXTERNAL-IP).
|
||||
|
||||
spec:
|
||||
rules:
|
||||
--> - host: factory.domain.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
backend:
|
||||
serviceName: factory
|
||||
servicePort: 80
|
||||
--> - host: api.factory.domain.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
backend:
|
||||
serviceName: factory
|
||||
servicePort: 8081
|
||||
|
||||
If you are using Ingress Nginx, do not forgot to comment `Traefik` and uncomment `Ingress Nginx`.
|
||||
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: factory
|
||||
annotations:
|
||||
#kubernetes.io/ingress.class: traefik
|
||||
kubernetes.io/ingress.class: nginx
|
||||
|
||||
Once you have corrected the DNS names (or internal /etc/hosts file), install the Kerberos Factory web app inside your cluster.
|
||||
|
||||
kubectl apply -n kerberos-factory -f ./factory/yaml/factory/deployment.yaml
|
||||
|
||||
## Test out configuration
|
||||
|
||||
If everything worked out as expected, you should now have following services in your cluster across different namespaces:
|
||||
|
||||
- MongoDB
|
||||
- Traefik
|
||||
- Factory
|
||||
|
||||
It should look like this.
|
||||
|
||||
$ kubectl get pods -n kerberos-factory
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
factory-6f5c877d7c-hf77p 1/1 Running 0 2d11h
|
||||
|
||||
$ kubectl get pods -n mongodb
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
mongodb-758d5c5ddd-qsfq9 1/1 Running 0 5m31s
|
||||
|
||||
$ kubectl get pods -n traefik
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
traefik-7d566ccc47-mwslb 1/1 Running 0 4d12h
|
||||
|
||||
## Access the system
|
||||
|
||||
Once everything is configured correctly your cluster and DNS, you should be able to set up the Factory application. By navigating to the domain `factory.domain.com` in your browser you will see the login page showing up.
|
||||
|
||||
{{< figure src="login.png" alt="Once successfully installed Kerberos Factory, it will show you the login page." caption="Once successfully installed Kerberos Factory, it will show you the login page." class="stretch">}}
|
||||